簡體   English   中英

Qt - 簡單地說,什么是 QApplication?

[英]Qt - What is QApplication, simply?

我在Qt文檔中看到了QApplication的描述,但不是很清楚。

你能簡單描述一下它主要做什么嗎?

謝謝。

關於 QApplication 最重要的事情是它的exec方法運行事件循環,它基本上是使插槽和信號工作的軟件。

簡而言之,如果沒有正在運行的事件循環,則您的 GUI 組件觸發的事件根本不會傳播,因此您的 UI 根本不會做任何事情。

簡單的說

Q*Application實例通過運行其主事件循環使 Qt 應用程序保持活動狀態 它處理所有事件(鼠標、鍵盤、刷新)、信號槽、計時器和大多數需要某種異步或事件處理(GUI、OS 等)的 Qt 功能。

如果沒有 Q*Application,你基本上只能按順序運行 Qt 代碼 我的意思是:沒有 Qt 計時器,沒有操作系統/用戶交互。 這有時是需要的,例如在單元測試中。

主線程事件循環在您調用 Q*Application exec()方法后立即開始,並阻塞直到應用程序退出。

選擇正確的 Q*Application

根據您的應用程序類型,您將需要該類的不同風格以避免拉取不必要的依賴項:

您通常首先創建 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM