问:什么是QApplication?

时间:2011-04-24 10:26:18

标签: c++ qt

我在QApplication文档中看到了Qt的说明,但并不清楚。

你可以简单地描述它主要做什么吗?

感谢。

3 个答案:

答案 0 :(得分:8)

关于QApplication最重要的一点是它的 exec 方法运行事件循环,这基本上是使插槽和信号工作的软件。

简而言之,如果没有正在运行的事件循环,那么GUI组件触发的事件将根本不会传播,因此您的UI根本不会执行任何操作。

答案 1 :(得分:1)

它是以非OO语言存在的所有应用程序级全局状态的占位符。

答案 2 :(得分:0)

TL; DR

Q*Application是处理所有事件,信号时隙,计时器和大多数Qt功能(需要某种异步或事件处理(GUI,OS等)的功能)所需的核心类。

它已创建并运行主线程事件循环。在您的主目录中创建一个,然后使用qApp->exec()启动它。调用一直阻塞,直到应用程序退出。

选择正确的Q * Application

根据您的应用程序类型,您将希望使用该类的其他样式,以避免提取不必要的依赖项:

  • 无头的应用程序:QCoreApplication
  • 基于Qt Quick的图形应用程序:QGuiApplication
  • 基于Qt窗口小部件的图形应用程序: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。您可以使用其局部变量或全局qApp指针来控制它。

详细职责

要复制QApplication类的文档,请执行以下操作:

  

QApplication的主要职责是:

     
      
  • 它将使用用户的桌面设置(例如:palette(),font()和doubleClickInterval())来初始化应用程序。万一用户全局更改桌面(例如通过某种控制面板),它会跟踪这些属性。
  •   
  • 它执行事件处理,这意味着它从底层窗口系统接收事件并将其分派到相关的小部件。通过使用sendEvent()和postEvent(),您可以将自己的事件发送到小部件。
  •   
  • 它解析常见的命令行参数并相应地设置其内部状态。有关更多详细信息,请参见下面的构造函数文档。
  •   
  • 它定义了应用程序的外观,并封装在QStyle对象中。可以在运行时使用setStyle()进行更改。
  •   
  • 它指定应用程序如何分配颜色。有关详细信息,请参见setColorSpec()。
  •   
  • 它提供了本地字符串,这些字符串通过translate()对用户可见。
  •   
  • 它提供了一些神奇的对象,例如desktop()和剪贴板()。
  •   
  • 它了解应用程序的窗口。您可以使用widgetAt()询问哪个小部件在某个位置,获取topLevelWidgets()和closeAllWindows()的列表,等等。
  •   
  • 它管理应用程序的鼠标光标处理,请参见setOverrideCursor()
  •   

QApplication::event是您可以覆盖的方法之一,它使您可以完全控制应用程序中所有事件的处理方式。可以通过继承它或使用installEventFilter方法来实现。