成员函数文档
QApplication::QApplication(int &argc, char **argv)
在argv 中初始化窗口系统并使用argc 命令行参数构建应用程序对象。
警告: argc 和argv 引用的数据必须在 QApplication 对象的整个生命周期内保持有效。此外,argc 必须大于零,argv 必须至少包含一个有效字符串。
全局qApp 指针指向该应用程序对象。只能创建一个应用程序对象。
该应用程序对象必须在任何paint devices (包括部件、像素图、位图等)之前创建。
注意: argc 和argv 可能会更改,因为 Qt 会删除它能识别的命令行参数。
所有 Qt 程序都自动支持以下命令行选项:
-style=风格,设置应用程序的图形用户界面风格。可能的值取决于系统配置。如果您在编译 Qt 时使用了其他样式,或将其他样式作为插件,那么-style 命令行选项也将支持这些样式。您还可以通过设置QT_STYLE_OVERRIDE 环境变量来为所有 Qt 应用程序设置样式。
-style样式,与上面列出的相同。
-stylesheet=样式表,设置应用程序样式表。该值必须是包含样式表的文件路径。
注意: 样式表文件中的相对 URL 是相对于样式表文件路径的。
-stylesheet样式表,与上面列出的相同。
-widgetcount,在最后打印调试信息,说明未销毁的部件数量和同时存在的最大部件数量。
-reverse,将应用程序的布局方向设置为Qt::RightToLeft
-qmljsdebugger=,激活指定端口的 QML/JS 调试器。该值的格式必须是 port:1234[,block],其中 block 是可选项,它将使应用程序等待调试器连接到它。
另请参阅 QCoreApplication::arguments().
[virtual noexcept] QApplication::~QApplication()
清理该程序分配的窗口系统资源。将全局变量qApp 设置为nullptr 。
[static slot] void QApplication::aboutQt()
显示一个有关 Qt 的简单消息框。该信息包括应用程序使用的 Qt 版本号。
如菜单示例所示,该信息可用于包含在应用程序的Help 菜单中。
该函数是QMessageBox::aboutQt() 的便利槽。
[static] QWidget *QApplication::activeModalWidget()
返回活动的模态部件。
模态部件是一种特殊的顶层部件,它是QDialog 的子类,将构造函数的模态参数指定为 true。用户必须先关闭模态部件,才能继续运行程序的其他部分。
模态 widget 以堆栈的形式组织。该函数返回堆栈顶部的活动模态部件。
另请参阅 activePopupWidget() 和topLevelWidgets()。
[static] QWidget *QApplication::activePopupWidget()
返回激活的弹出窗口部件。
弹出窗口部件是一种特殊的顶级窗口部件,可设置Qt::WType_Popup 窗口部件标志,例如QMenu 窗口部件。当应用程序打开弹出窗口部件时,所有事件都会发送到弹出窗口。在弹出窗口部件关闭之前,无法访问普通窗口部件和模式窗口部件。
显示弹出窗口部件时,只能打开其他弹出窗口部件。弹出窗口部件以堆栈的形式排列。该函数返回堆栈顶部的活动弹出窗口部件。
另请参阅 activeModalWidget() 和topLevelWidgets()。
[static] QWidget *QApplication::activeWindow()
返回拥有键盘输入焦点的应用程序顶层窗口,如果没有应用程序窗口拥有焦点,则返回nullptr 。即使没有focusWidget() 也可能有 activeWindow(),例如,如果该窗口中没有部件接受按键事件。
另请参阅 QWidget::setFocus()、QWidget::hasFocus() 和focusWidget()。
[static] void QApplication::alert(QWidget *widget, int msec = 0)
如果窗口不是活动窗口,则在widget 上显示警报。警报显示时间为msec 毫秒。如果msec 为零(默认值),则警报将无限期显示,直到窗口再次处于活动状态。
目前,该功能在 Qt for Embedded Linux 上不起作用。
在 macOS 上,该功能更多是在应用程序层面上工作,会导致应用程序图标在 dock 中跳动。
在 Windows 上,这会导致窗口的任务栏条目闪烁一段时间。如果msec 为零,闪烁将停止,任务栏条目将变成不同的颜色(目前为橙色)。
在 X11 上,这将导致窗口被标记为 "需要注意",窗口必须未被隐藏(即未被调用 hide(),但以某种方式可见),这样才能起作用。
[static] QWidgetList QApplication::allWidgets()
返回应用程序中所有部件的列表。
如果没有部件,则列表为空 (QList::isEmpty()) 。
注意: 某些部件可能是隐藏的。
示例:
void updateAllWidgets()
{
const QWidgetList allWidgets = QApplication::allWidgets();
for (QWidget *widget : allWidgets)
widget->update();
}
另请参阅 topLevelWidgets() 和QWidget::isVisible()。
[static] void QApplication::beep()
使用默认音量和声音发出铃声。该功能在 Qt for Embedded Linux 中不可用。
[static slot] void QApplication::closeAllWindows()
关闭所有顶级窗口。
该功能对于有许多顶层窗口的应用程序特别有用。
窗口会以随机顺序关闭,直到其中一个窗口不接受关闭事件。除非quitOnLastWindowClosed 设为 false,否则当最后一个窗口成功关闭时,应用程序就会退出。要从菜单等触发应用程序终止,请使用QCoreApplication::quit() 代替此函数。
另请参阅 quitOnLastWindowClosed,lastWindowClosed(),QWidget::close(),QWidget::closeEvent(),lastWindowClosed(),QCoreApplication::quit(),topLevelWidgets(), 和QWidget::isWindow().
[override virtual protected] bool QApplication::event(QEvent *e)
重实现:QGuiApplication::event(QEvent *e)。
[static] int QApplication::exec()
进入主事件循环,等待exit() 被调用,然后返回exit() 设置的值(如果exit() 通过quit() 被调用,则返回值为 0)。
必须调用该函数才能开始事件处理。主事件循环从窗口系统接收事件,并将这些事件分派给应用程序部件。
一般情况下,在调用 exec() 之前不会有任何用户交互。作为特例,在调用 exec() 之前可以使用QMessageBox 等模式部件,因为模式部件调用 exec() 会启动本地事件循环。
要使应用程序执行空闲处理(即在没有待处理事件时执行特殊函数),可使用超时为 0ns 的QChronoTimer 。使用processEvents() 可以实现更高级的空闲处理方案。
我们建议您将清理代码连接到aboutToQuit() 信号,而不是放在应用程序的main() 函数中。这是因为在某些平台上,QApplication::exec() 调用可能不会返回。例如,在 Windows 平台上,当用户注销时,系统会在 Qt 关闭所有顶层窗口后终止进程。因此,在调用 QApplication::exec() 之后,无法保证应用程序有时间在main() 函数结束时退出事件循环并执行代码。
另请参阅 quitOnLastWindowClosed,QCoreApplication::quit(),QCoreApplication::exit(),QCoreApplication::processEvents() 和QCoreApplication::exec().
[signal] void QApplication::focusChanged(QWidget *old, QWidget *now)
当键盘焦点所在的窗口小部件从old 变为now 时,即用户按下制表符键、点击窗口小部件或更改活动窗口时,就会发出该信号。old 和now 都可以是nullptr 。
该信号是在两个窗口部件都通过QFocusEvent 收到更改通知后发出的。
另请参阅 QWidget::setFocus(),QWidget::clearFocus() 和Qt::FocusReason 。
[static] QWidget *QApplication::focusWidget()
返回拥有键盘输入焦点的应用程序部件,如果此应用程序中没有部件拥有焦点,则返回nullptr 。
另请参阅 QWidget::setFocus()、QWidget::hasFocus()、activeWindow() 和focusChanged()。
[static] QFont QApplication::font()
返回默认应用程序字体。
另请参阅 setFont()、fontMetrics() 和QWidget::font()。
[static] QFont QApplication::font(const QWidget *widget)
返回widget 的默认字体。如果没有为widget 的类注册默认字体,则返回与其最接近的已注册超类的默认字体。
这是一个重载函数。
另请参阅 fontMetrics()、setFont() 和QWidget::setFont()。
[static] QFont QApplication::font(const char *className)
返回给定className 的 widget 的字体。
这是一个重载函数。
另请参阅 setFont() 和QWidget::font()。
[static] bool QApplication::isEffectEnabled(Qt::UIEffect effect)
如果启用了effect ,则返回true ;否则返回false 。
默认情况下,Qt 会尝试使用桌面设置。要阻止这种情况,请调用 setDesktopSettingsAware(false)。
注意: 在色彩深度小于 16 位的屏幕上,所有特效都将被禁用。
另请参阅 setEffectEnabled() 和Qt::UIEffect 。
[static] Qt::NavigationMode QApplication::navigationMode()
返回 Qt 正在使用的焦点导航类型。
此功能仅在 Qt for Embedded Linux 中可用。
另请参阅 setNavigationMode()。
[override virtual] bool QApplication::notify(QObject *receiver, QEvent *e)
重实现:QGuiApplication::notify(QObject *object, QEvent *event).
[static] QPalette QApplication::palette(const QWidget *widget)
如果传递的是widget ,则会返回 widget 类的默认调色板。这可能是也可能不是应用程序调色板。在大多数情况下,某些类型的 widget 没有特殊的调色板,但一个明显的例外是 Windows 下的弹出式菜单,如果用户在显示设置中为菜单定义了特殊的背景色。
另请参阅 setPalette() 和QWidget::palette()。
[static] QPalette QApplication::palette(const char *className)
返回给定className 的部件的调色板。
这是一个重载函数。
另请参阅 setPalette() 和QWidget::palette() 。
[static] void QApplication::setEffectEnabled(Qt::UIEffect effect, bool enable = true)
如果enable 为 true,则启用用户界面特效effect ,否则将不使用该特效。
注意: 在色彩深度小于 16 位的屏幕上,所有特效都将禁用。
另请参阅 isEffectEnabled(),Qt::UIEffect, 和setDesktopSettingsAware().
[static] void QApplication::setFont(const QFont &font, const char *className = nullptr)
将应用程序默认字体更改为font 。如果传入className ,则更改仅适用于继承className 的类(如QObject::inherits() 所报告)。
应用程序启动时,默认字体取决于窗口系统。它可能因窗口系统版本和地域而异。该函数允许您覆盖默认字体;但覆盖默认字体可能不是一个好主意,因为例如,某些本地系统需要超大字体来支持其特殊字符。
警告 请勿将此函数与Qt 样式表结合使用。应用程序的字体可使用 "font "样式表属性进行自定义。要为所有 QPushButton 设置粗体字体,请将应用程序styleSheet() 设置为 "QPushButton { font: bold }" 。
另请参阅 font()、fontMetrics() 和QWidget::setFont()。
[static] void QApplication::setNavigationMode(Qt::NavigationMode mode)
设置 Qt 应使用的焦点导航类型mode 。
此功能仅在 Qt for Embedded Linux 中可用。
另请参阅 navigationMode() 。
[static] void QApplication::setPalette(const QPalette &palette, const char *className = nullptr)
将应用程序调色板更改为palette 。
如果通过className ,则更改仅适用于继承className 的部件(如QObject::inherits() 所报告)。如果className 留为 0,则更改会影响所有部件,从而覆盖先前设置的任何特定类的调色板。
调色板可根据QStyle::polish() 中的当前图形用户界面风格进行更改。
警告 请勿将此函数与Qt 样式表结合使用。使用样式表时,可使用 "color"、"background-color"、"selection-color"、"selection-background-color "和 "alternate-background-color "自定义部件的调色板。
注意: 有些样式不会在所有绘图中使用调色板,例如,如果它们使用本地主题引擎。Windows Vista 和 macOS 风格就是这种情况。
另请参阅 QWidget::setPalette()、palette() 和QStyle::polish()。
[static] void QApplication::setStyle(QStyle *style)
将应用程序的图形用户界面样式设置为style 。样式对象的所有权将转移到QApplication ,因此QApplication 将在应用程序退出或设置了新样式而旧样式仍是应用程序对象的父对象时删除样式对象。
使用示例
QApplication::setStyle(QStyleFactory::create("Fusion"));
切换应用程序样式时,调色板会设置回初始颜色或系统默认颜色。这是必要的,因为某些样式必须调整调色板才能完全符合样式指南的要求。
在调色板设置之前设置样式,即在创建QApplication 之前,会导致应用程序使用QStyle::standardPalette() 来设置调色板。
警告: 目前,自定义QStyle 子类不支持 Qt XML 样式表。我们计划在未来的版本中解决这个问题。
另请参阅 style()、QStyle 、setPalette() 和desktopSettingsAware()。
[static] QStyle *QApplication::setStyle(const QString &style)
从QStyleFactory 请求style 的QStyle 对象。
字符串必须是QStyleFactory::keys() 中的一个,通常是 "windows"、"windowsvista"、"fusion "或 "macos "中的一个。样式名称不区分大小写。
如果传递的是未知的style ,则返回nullptr ,否则返回的QStyle 对象将被设置为应用程序的图形用户界面样式。
警告 为确保正确设置应用程序的样式,最好尽可能在QApplication 构造函数之前调用此函数。
这是一个重载函数。
[static] QStyle *QApplication::style()
返回应用程序的样式对象。
另请参阅 setStyle() 和QStyle 。
[static] QWidget *QApplication::topLevelAt(const QPoint &point)
返回给定point 上的顶级 widget;如果没有此类 widget,则返回nullptr 。
[static] QWidget *QApplication::topLevelAt(int x, int y)
返回点 (x,y) 上的顶层 widget;如果没有该 widget,则返回 0。
这是一个重载函数。
[static] QWidgetList QApplication::topLevelWidgets()
返回应用程序中顶层部件(窗口)的列表。
注意: 某些顶层窗口部件可能会被隐藏,例如当前未显示工具提示的工具提示。
举例说明
void showAllHiddenTopLevelWidgets()
{
const QWidgetList topLevelWidgets = QApplication::topLevelWidgets();
for (QWidget *widget : topLevelWidgets) {
if (widget->isHidden())
widget->show();
}
}
另请参阅 allWidgets()、QWidget::isWindow() 和QWidget::isHidden()。
[static] QWidget *QApplication::widgetAt(const QPoint &point)
返回位于全局屏幕位置point 的 Widget,如果该位置没有 Qt Widget,则返回nullptr 。
此函数运行速度可能较慢。
另请参阅 QCursor::pos()、QWidget::grabMouse() 和QWidget::grabKeyboard()。
[static] QWidget *QApplication::widgetAt(int x, int y)
返回全局屏幕位置(x,y )上的 Widget,如果没有 Qt Widget,则返回nullptr 。
这是一个重载函数。