[英]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.