Qt 之 QApplication


 

1、QApplication

QApplication類管理GUI程序的控制流和主要設置,是基於QWidget的,為此特化了QGuiApplication的一些功能,處理QWidget特有的初始化和結束收尾工作。 
對於使用了Qt的任何GUI程序來說,不管何時何地有多少個Window,但只有一個QApplication對象,如果不是基於QWidget的程序,相應的則使用QGuiApplication,后者不依賴於Widget特有的庫。 
有些程序是不使用GUI的,通過命令行參數執行不同的任務而不用手動設置,這時使用QCoreApplication就夠了,避免初始化不必要的GUI資源。

上面提到了只能有一個QApplication實例,其實就是Singleton模式,對象指針通過instance()靜態函數獲取,或者使用等效的qApp宏。QApplication的主要職責如下: 
1、使用用戶的桌面設置進行初始化,這些設置如palette()font()doubleClickInterval(),然后跟蹤這些屬性的變化,如用戶通過某種配置面板修改了全局桌面設置。 
2、處理事件,從窗口系統接收事件並派發到相應的Widget,使用sendEvent()postEvent()函數可以派發事件。 
3、處理命令行參數,設置內部狀態。 
4、定義GUI外觀,外觀由QStyle對象包裝,運行時通過setStyle()函數進行設置。 
5、設置顏色分配規則,對應的函數為setColorSpec()。 
6、本地化字符串,函數為translate()。 
7、提供了一些有用的對象,如desktop()clipboard()函數。 
8、知道Widget及Window,相應的函數為widgetAt()topLevelWidgets()closeAllWindows()。 
9、管理鼠標光標,函數為setOverrideCursor()。 
從上面可以看出,QApplication作了許多初始化工作,因此在任何其它的UI對象創建之前必須先創建QApplication對象,而且還可以通過命令行參數設置一些內部狀態。

2、QGuiApplication

QApplication繼承自QGuiApplication,后者是基於非QWidget的,提供了會話管理,用戶退出時可以友好地終止程序,如果終止不了還可以取消對應的進程,甚至是保存程序的所有狀態用於將來的會話,相關函數為isSessionRestored()sessionId()commitDataRequest()saveDataRequest()

3、QCoreApplication

QGuiApplication繼承自QCoreApplication,后者不包括UI,一大核心功能是提供了event loop,這些event可以來自操作系統,如timer、網絡事件,以及其它來源的event都可以被收發。調用exec()函數進入event loop,直到quit()函數調用時才退出,退出時發送aboutToQuit()信號,等同於exit(0)函數,sendEvent()函數立即處理事件,postEvent()函數把事件放入消息隊列以等待后續處理,處於消息隊列的的event還可以通過removePostedEvent()sendPostedEvent()進行刪除和立即處理。 
與程序路徑相關的有兩個函數applicationDirPath()applicationFilePath(),另外一個是庫相關的,函數為libraryPaths()setLibraryPaths()addLibraryPath()removeLibraryPath(),以及QLibrary類。 
國際化、翻譯相關的函數為translate(),以及installTranslator()removeTranslator()。 
獲取命令行參數使用函數arguments(),專門處理命令行參數的類為QCommandLineParser。 
為了保證兼容性,還要適當的設置語系setLocale()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM