1. 程式人生 > >QT---之QApplication的解釋

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