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()
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()
。