繁体   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