我在QApplication
文档中看到了Qt
的说明,但并不清楚。
你可以简单地描述它主要做什么吗?
感谢。
答案 0 :(得分:8)
关于QApplication最重要的一点是它的 exec 方法运行事件循环,这基本上是使插槽和信号工作的软件。
简而言之,如果没有正在运行的事件循环,那么GUI组件触发的事件将根本不会传播,因此您的UI根本不会执行任何操作。
答案 1 :(得分:1)
它是以非OO语言存在的所有应用程序级全局状态的占位符。
答案 2 :(得分:0)
Q*Application
是处理所有事件,信号时隙,计时器和大多数Qt功能(需要某种异步或事件处理(GUI,OS等)的功能)所需的核心类。
它已创建并运行主线程事件循环。在您的主目录中创建一个,然后使用qApp->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
。您可以使用其局部变量或全局qApp
指针来控制它。
要复制QApplication
类的文档,请执行以下操作:
QApplication的主要职责是:
- 它将使用用户的桌面设置(例如:palette(),font()和doubleClickInterval())来初始化应用程序。万一用户全局更改桌面(例如通过某种控制面板),它会跟踪这些属性。
- 它执行事件处理,这意味着它从底层窗口系统接收事件并将其分派到相关的小部件。通过使用sendEvent()和postEvent(),您可以将自己的事件发送到小部件。
- 它解析常见的命令行参数并相应地设置其内部状态。有关更多详细信息,请参见下面的构造函数文档。
- 它定义了应用程序的外观,并封装在QStyle对象中。可以在运行时使用setStyle()进行更改。
- 它指定应用程序如何分配颜色。有关详细信息,请参见setColorSpec()。
- 它提供了本地字符串,这些字符串通过translate()对用户可见。
- 它提供了一些神奇的对象,例如desktop()和剪贴板()。
- 它了解应用程序的窗口。您可以使用widgetAt()询问哪个小部件在某个位置,获取topLevelWidgets()和closeAllWindows()的列表,等等。
- 它管理应用程序的鼠标光标处理,请参见setOverrideCursor()
QApplication::event
是您可以覆盖的方法之一,它使您可以完全控制应用程序中所有事件的处理方式。可以通过继承它或使用installEventFilter
方法来实现。