![](/img/trans.png)
[英]What did QWidget* QApplication::mainWidget() become in Qt4?
[英]Qt - What is QApplication, simply?
我在Qt
文檔中看到了QApplication
的描述,但不是很清楚。
你能簡單描述一下它主要做什么嗎?
謝謝。
關於 QApplication 最重要的事情是它的exec方法運行事件循環,它基本上是使插槽和信號工作的軟件。
簡而言之,如果沒有正在運行的事件循環,則您的 GUI 組件觸發的事件根本不會傳播,因此您的 UI 根本不會做任何事情。
Q*Application
實例通過運行其主事件循環使 Qt 應用程序保持活動狀態。 它處理所有事件(鼠標、鍵盤、刷新)、信號槽、計時器和大多數需要某種異步或事件處理(GUI、OS 等)的 Qt 功能。
如果沒有 Q*Application,你基本上只能按順序運行 Qt 代碼。 我的意思是:沒有 Qt 計時器,沒有操作系統/用戶交互。 這有時是需要的,例如在單元測試中。
主線程事件循環在您調用 Q*Application exec()
方法后立即開始,並阻塞直到應用程序退出。
根據您的應用程序類型,您將需要該類的不同風格以避免拉取不必要的依賴項:
QCoreApplication
QGuiApplication
QApplication
您通常首先創建 Q*Application,根據需要初始化應用程序的“靜態”部分,然后調用qApp->exec()
來運行主事件循環。 該函數將阻塞,直到您的應用程序關閉。
int main(int argc, char *argv[]) {
// Q[Core|Gui|)Application
QCoreApplication app(argc, argv);
// Load critical settings i.e. minimal config files, GUI, etc.
// Remember no events, timers, and signals slots will work at that stage
QSettings settings(...);
// Start the QApplication
// Will return once the application closes (forced, or by user)
return app.exec();
}
您的應用Q*Application
應該只存在一個Q*Application
。 您可以使用其局部變量或全局qApp
指針來控制它。
復制QApplication
類的文檔:
QApplication 的主要職責范圍是:
- 它使用用戶的桌面設置初始化應用程序,例如palette()、font() 和doubleClickInterval()。 它會跟蹤這些屬性,以防用戶全局更改桌面,例如通過某種控制面板。
- 它執行事件處理,這意味着它從底層窗口系統接收事件並將它們分派給相關的小部件。 通過使用 sendEvent() 和 postEvent(),您可以將自己的事件發送到小部件。
- 它解析常見的命令行參數並相應地設置其內部狀態。 有關更多詳細信息,請參閱下面的構造函數文檔。
- 它定義了應用程序的外觀和感覺,它被封裝在一個 QStyle 對象中。 這可以在運行時使用 setStyle() 進行更改。
- 它指定應用程序如何分配顏色。 有關詳細信息,請參閱 setColorSpec()。
- 它通過 translate() 提供對用戶可見的字符串的本地化。
- 它提供了一些神奇的對象,如桌面()和剪貼板()。
- 它知道應用程序的窗口。 您可以使用 widgetAt() 詢問哪個小部件在某個位置,獲取 topLevelWidgets() 和 closeAllWindows() 等列表。
- 它管理應用程序的鼠標光標處理,參見 setOverrideCursor()
您可以覆蓋的方法之一是QApplication::event
,它使您可以完全控制應用程序中所有事件的處理方式。 這可以通過繼承它或使用installEventFilter
方法來完成。
它是存在於非 OO 語言中的所有應用程序級全局狀態的占位符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.