女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Qt的QApplication不簡單!

嵌入式小生 ? 來源:嵌入式小生 ? 2023-02-13 10:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、導(dǎo)讀

把焦點回到Qt應(yīng)用開發(fā)中,一般情況下,Qt應(yīng)用程序的本體由main.cpp文件中的main()函數(shù)中內(nèi)容描述:

#include

#include"mainwindow.h"

intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);

MainWindowwindow;
window.show();

returnapp.exec();
}

在上述代碼中,創(chuàng)建了一個QApplication實例和MainWindow實例,MainWindow實例表示主窗體應(yīng)用,QApplication正是本文的描述對象,她是QWidget的“地基”。QApplication是專門的QGuiApplication,它具有一些基于QWidget應(yīng)用程序需要的功能:處理小部件特定的初始化和銷毀操作。文檔中對她是這樣描述的:

183b399e-ab49-11ed-bfe3-dac502259ad0.png

該類繼承自QGuiApplication類,文檔中對QGuiApplication是這樣描述的:

184e1028-ab49-11ed-bfe3-dac502259ad0.png

從上圖可知,QGuiApplication繼承自QCoreApplication,又來看看QCoreApplication類:

1877ccc4-ab49-11ed-bfe3-dac502259ad0.png

從上述描述可知,QApplication、QGuiApplication、QCoreApplication這三個類是“父-子”包含關(guān)系,那么在實際開發(fā)中,該如何選擇呢?

對于任何基于QWidget的GUI應(yīng)用程序來說(注意是基于QWidget的),無論該應(yīng)用程序在任何時間有多少個窗口,都只有一個QApplication對象;如果不是基于QWidget的GUI應(yīng)用程序,應(yīng)該使用QGuiApplication,例如QtQuick應(yīng)用,而對于不需要QWidget或者GUI的Qt應(yīng)用程序來說,應(yīng)該使用QCoreApplcation,該類不依賴于QtWidgets庫。在不需要GUI的應(yīng)用程序中,使用QCoreApplication,該類可以避免對圖形用戶界面所需的資源進(jìn)行不必要的初始化。

二、再談QApplication

在文本開始處貼出的代碼中,main函數(shù)傳入的參數(shù)argc、argv在創(chuàng)建QApplication實例的時候傳了進(jìn)去,因為在QApplication初始過程中需要用argv中的argc命令行參數(shù)構(gòu)造應(yīng)用程序?qū)ο?,從源碼角度看,在QApplication的構(gòu)造函數(shù)中會進(jìn)行如下操作:

1890585c-ab49-11ed-bfe3-dac502259ad0.png

上圖中,Q_D是一個宏定義,用于創(chuàng)建一個指向ApplicationPrivate的指針,定義如下:

#defineQ_D(Class)Class##Private*constd=d_func()

ApplicationPrivate類的存在用于描述QApplication的私有數(shù)據(jù),她的存在是為了Qt源碼而設(shè)計的?;氐絈Application的構(gòu)造函數(shù)中,最后會調(diào)用init(),該函數(shù)實現(xiàn)如下(/qtbase/src/widgets/kernel目錄中):

voidQApplicationPrivate::init()
{
#ifdefined(Q_OS_MACOS)
QMacAutoReleasePoolpool;
#endif

//初始化QGuiApplication的私有數(shù)據(jù)。
QGuiApplicationPrivate::init();

//初始化資源。
initResources();

qt_is_gui_used=(application_type!=QApplicationPrivate::Tty);
//處理命令行參數(shù)。
process_cmdline();

//Mustbecalledbeforeinitialize()
QColormap::initialize();//初始化QColormap
initializeWidgetPalettesFromTheme();
qt_init_tooltip_palette();
//初始化QApplication的私有數(shù)據(jù)
QApplicationPrivate::initializeWidgetFontHash();

//初始化QApplication對象,重磅函數(shù)
initialize();
eventDispatcher->startingUp();

#ifndefQT_NO_ACCESSIBILITY
//factoryforaccessibleinterfacesforwidgetsshippedwithQt
QAccessible::installFactory(&qAccessibleFactory);
#endif

}

從源碼角度,可以清楚地看到QApplication的構(gòu)造過程和功能,主要用于初始化與GUI相關(guān)的的資源,創(chuàng)建QApplication對象,有如下行為:

(1)使用我們的桌面設(shè)置(如palette()、font()和doubleClickInterval())來初始化應(yīng)用程序。并跟蹤這些屬性,以防止我們?nèi)值馗淖烂?,例如:通過某種控制面板。

(2)執(zhí)行事件處理,它從底層窗口系統(tǒng)接收事件并將它們分派到相關(guān)的小部件(可理解成一個事件中轉(zhuǎn)站)。通過使用sendEvent()和postEvent(),可以將自己的事件發(fā)送到小部件。

(3)解析常用的命令行參數(shù)并相應(yīng)地設(shè)置其內(nèi)部狀態(tài)。

(4)定義應(yīng)用程序的外觀,并封裝在QStyle對象中。當(dāng)然可以在運行時使用setStyle()進(jìn)行更改。

(5)提供了通過translate()創(chuàng)建可見字符串的本地化操作。

(6)提供一些方便快捷的對象,便于在開發(fā)中使用,例如desktop()和clipboard()。

(7)管理應(yīng)用程序的窗口。我們可以使用widgetAt()來詢問哪個小部件位于某個位置,獲取topLevelWidgets()和closeAllWindows()的列表等。

(8)管理應(yīng)用程序的鼠標(biāo)指針處理。

在實際開發(fā)中,可以通過instance()函數(shù)訪問QApplication對象,該函數(shù)返回一個與全局qApp指針等價的指針。(qApp引用是應(yīng)用程序?qū)ο蟮奈ㄒ蝗种羔?。它等價于QCoreApplication::instance(),但轉(zhuǎn)換為指向QApplication的指針,因此僅當(dāng)唯一的應(yīng)用程序?qū)ο笫荙Application時才有效),Qt源碼中qApp定義如下:

#defineqApp(static_cast(QCoreApplication::instance()))

三、結(jié)尾

QApplication就像QWidget的地基一樣,GUI中的界面控件就如同“磚塊”一樣碼在上面了。

最后,貼出參考文檔中給出的一份代碼,其實現(xiàn)背后的知識值得學(xué)習(xí):

QCoreApplication*createApplication(int&argc,char*argv[])
{
for(inti=1;iapp(createApplication(argc,argv));

if(qobject_cast(app.data())){
//startGUIversion...
}else{
//startnon-GUIversion...
}

returnapp->exec();
}

上述代碼演示了如何動態(tài)創(chuàng)建適當(dāng)類型的應(yīng)用程序,小生從上述代碼get到一招和五個知識點......,打住,再寫就跑題了。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4377

    瀏覽量

    64553
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4894

    瀏覽量

    70449
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    38

    文章

    3329

    瀏覽量

    58882
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    2

    文章

    314

    瀏覽量

    38964

原文標(biāo)題:Qt的QApplication不簡單!

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    QT串口通信的簡單使用

    QT串口通信是上位機(jī)和下位機(jī)通信常用的通信方式, 也是學(xué)習(xí)QT必須學(xué)會的基礎(chǔ)知識, 這篇就簡單介紹一下QT串口通信的簡單使用.
    的頭像 發(fā)表于 01-15 09:27 ?3227次閱讀
    <b class='flag-5'>QT</b>串口通信的<b class='flag-5'>簡單</b>使用

    Qt之信號與槽例子(二)

    Keyunchuan");}/**************Main.cpp**************/#include//所有QT應(yīng)用程序都要包含QApplication頭文件#include "
    發(fā)表于 11-07 15:13

    Qt使用openCV庫

    ,現(xiàn)在最新的是2.2,不過我用的是2.1。注意下載的時候選擇VC專用版的。安裝OpenCV2.1,我安裝在C:/OpenCV2.1新建Qt的Project在.pro文件中包含OpenCV庫,很簡單
    發(fā)表于 11-22 16:12

    QT 使用及安裝資料-

    。Qmake:使用此工具可以由簡單的、 與平臺無關(guān)的工程文件來生成編譯所需的 Makefile。Qt Assistant:關(guān)于 Qt 的幫助文件。類似于 MSDN。可以快速地發(fā)現(xiàn)你所需要的幫助。moc:元對象
    發(fā)表于 09-28 11:04

    給初學(xué)Qt者的小TIP

    1、Hello, Qt!我們以一個非常簡單Qt 程序開始 Qt 的學(xué)習(xí)。我們首先一行行的分析代碼,然后我們將會看到怎樣編譯和運行這個程序。1 #include 2 #include
    發(fā)表于 10-14 11:04

    qt學(xué)習(xí)之路-HelloWorld

    打算花一定的時間寫一個完整的qt在arm運行實驗的教程,在學(xué)習(xí)這個教程之前,你需要配置好交叉編譯環(huán)境(arm-linux-gcc),編譯安裝arm版的qt(我編譯安裝的是運行在mini2440開發(fā)板
    發(fā)表于 07-09 04:46

    QT4的中文手冊

    QApplication app(argc, argv);6 QLabel *label = new QLabel(\"Hello Qt!\");7 label->
    發(fā)表于 09-28 06:29

    簡約而不簡單的真空斷路器,它有哪些應(yīng)用優(yōu)勢

    簡潔不簡單的真空斷路器: 現(xiàn)階段的銷售市場狀況看來,性能卓越、高開走強(qiáng)斷能力的隔離開關(guān)需要量非常大,也是許多大中型電氣設(shè)備企業(yè)主推的商品。但簡潔好用的隔離開關(guān)也不容忽視,其在具體的運用中也占據(jù)豐厚
    發(fā)表于 01-11 11:14 ?627次閱讀

    嵌入式Linux開發(fā),Qt開發(fā)界面中,不顯示鼠標(biāo)箭頭

    Qt開發(fā)界面中,不顯示鼠標(biāo)箭頭,有兩種方法可實現(xiàn)一、方法一,在程序中處理。#include #include "mainwindow.h
    發(fā)表于 11-02 14:21 ?22次下載
    嵌入式Linux開發(fā),<b class='flag-5'>Qt</b>開發(fā)界面中,不顯示鼠標(biāo)箭頭

    QT之嵌入式Linux下觸摸屏上隱藏鼠標(biāo)指針的學(xué)習(xí)筆記

    在嵌入式Linux環(huán)境下,為了觸摸屏界面的美觀,通常需要隱藏鼠標(biāo)指針對于整個應(yīng)用程序的解決方案是:QApplication::setOverrideCursor(Qt::BlankCursor);
    發(fā)表于 11-02 15:06 ?14次下載
    <b class='flag-5'>QT</b>之嵌入式Linux下觸摸屏上隱藏鼠標(biāo)指針的學(xué)習(xí)筆記

    Qt中的三個exec之間有什么聯(lián)系

    Qt中,常見到三個exec,第一個是QApplication::exec(),第二個是QEventLoop::exec,第三個是QThread::exec()。本文從源碼角度來看看這三個exec()。
    的頭像 發(fā)表于 03-06 09:44 ?2974次閱讀

    基于QT簡單的上位機(jī)

    一、前言大家好,我是ZhengN,本次來教大家編寫一個基于QT簡單的上位機(jī)。學(xué)習(xí)一個新的東西我們都從最基礎(chǔ)地實例開始,比如學(xué)習(xí)C語言我們會從編寫一個hello程序開始、學(xué)習(xí)嵌入式我們從點燈開始
    發(fā)表于 05-08 10:57 ?18次下載
    基于<b class='flag-5'>QT</b>的<b class='flag-5'>簡單</b>的上位機(jī)

    QT|編寫一個簡單的上位機(jī)

    QT | 編寫一個簡單的上位機(jī) 時間 :2023-03-19文章目錄QT | 編寫一個簡單的上位機(jī) 參考及資料: 1.打開`QT Creat
    發(fā)表于 05-08 10:12 ?3次下載
    <b class='flag-5'>QT</b>|編寫一個<b class='flag-5'>簡單</b>的上位機(jī)

    QT實現(xiàn)簡單的上位機(jī)軟件

    最近項目要求寫上位機(jī)軟件,需要實現(xiàn)界面功能和串口讀寫。界面方面用過MFC(早忘記了),網(wǎng)上查閱資料后發(fā)現(xiàn)QT在5.1版本后有自帶的串口模塊,而且用QT實現(xiàn)簡單界面功能很容易上手(也就期末設(shè)計隨便玩過
    發(fā)表于 05-08 09:54 ?4次下載
    <b class='flag-5'>QT</b>實現(xiàn)<b class='flag-5'>簡單</b>的上位機(jī)軟件

    基于Qt簡單arduino上位機(jī)

    準(zhǔn)備工作 一塊esp8266,安裝arduinoIDE、Qt、navecate、mysql/**若沒有mysql可直接采用sqllist。 QT上位機(jī) 通信協(xié)議采用UDP(TCP同理),通過ip地址與端口實現(xiàn)數(shù)據(jù)獲取與顯示,主要用到socket。
    發(fā)表于 05-09 10:36 ?3次下載
    基于<b class='flag-5'>Qt</b>的<b class='flag-5'>簡單</b>arduino上位機(jī)