QApplication 类

QApplication 类管理 GUI 应用程序的控制流和主要设置。 更多...

头: #include <QApplication>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承: QGuiApplication

特性

公共函数

QApplication (int & argc , char ** argv )
virtual ~QApplication ()
bool autoSipEnabled () const
QString styleSheet () const

重实现公共函数

virtual bool notify (QObject * receiver , QEvent * e ) override

公共槽

void aboutQt ()
void closeAllWindows ()
void setAutoSipEnabled (const bool enabled )
void setStyleSheet (const QString & sheet )

信号

void focusChanged (QWidget * old , QWidget * now )

静态公共成员

QWidget * activeModalWidget ()
QWidget * activePopupWidget ()
QWidget * activeWindow ()
void alert (QWidget * widget , int msec = 0)
QWidgetList allWidgets ()
void beep ()
int cursorFlashTime ()
int doubleClickInterval ()
int exec ()
QWidget * focusWidget ()
QFont font ()
QFont font (const QWidget * widget )
QFont font (const char * className )
bool isEffectEnabled (Qt::UIEffect effect )
int keyboardInputInterval ()
Qt::NavigationMode navigationMode ()
QPalette palette (const QWidget * widget )
QPalette palette (const char * className )
void setCursorFlashTime (int)
void setDoubleClickInterval (int)
void setEffectEnabled (Qt::UIEffect effect , bool enable = true)
void setFont (const QFont & font , const char * className = nullptr)
void setKeyboardInputInterval (int)
void setNavigationMode (Qt::NavigationMode mode )
void setPalette (const QPalette & palette , const char * className = nullptr)
void setStartDragDistance (int l )
void setStartDragTime (int ms )
void setStyle (QStyle * style )
QStyle * setStyle (const QString & style )
void setWheelScrollLines (int)
int startDragDistance ()
int startDragTime ()
QStyle * style ()
QWidget * topLevelAt (const QPoint & point )
QWidget * topLevelAt (int x , int y )
QWidgetList topLevelWidgets ()
int wheelScrollLines ()
QWidget * widgetAt (const QPoint & point )
QWidget * widgetAt (int x , int y )

重实现保护函数

virtual bool event (QEvent * e ) override

qApp

详细描述

QApplication 专攻 QGuiApplication 具有一些所需功能对于 QWidget 基应用程序。它处理 Widget 特定初始化、定稿。

对于使用 QT 的任何 GUI 应用程序,准确存在 one QApplication 对象,无论应用程序在任何给定时间是否拥有 0 个、1 个、2 个或更多个窗口。对于非 QWidget 基 Qt 应用程序,使用 QGuiApplication 代替,因为它不从属 QtWidgets 库。

某些 GUI 应用程序提供特殊批处理模式 (即:提供用于执行任务的命令行自变量,不用手动干预)。在这种非 GUI 模式下,经常是足够的实例化纯 QCoreApplication 以避免不必要地初始化图形用户界面所需资源。以下范例展示如何动态创建适当类型的应用程序实例:

QCoreApplication* createApplication(int &argc, char *argv[])
{
    for (int i = 1; i < argc; ++i) {
        if (!qstrcmp(argv[i], "-no-gui"))
            return new QCoreApplication(argc, argv);
    }
    return new QApplication(argc, argv);
}
int main(int argc, char* argv[])
{
    QScopedPointer<QCoreApplication> app(createApplication(argc, argv));
    if (qobject_cast<QApplication *>(app.data())) {
       // start GUI version...
    } else {
       // start non-GUI version...
    }
    return app->exec();
}
					

QApplication 对象可访问透过 实例 () 函数返回指针相当于全局 qApp 指针。

QApplication 主要负责的领域:

  • 它采用用户的桌面设置初始化应用程序,譬如 palette (), font () 和 doubleClickInterval ()。它保持对这些特性的追踪,若用户全局更改桌面,例如透过某种控制面板。
  • 它履行事件处理,意味着它接收来自底层窗口系统的事件并将它们分派给相关 Widget。通过使用 sendEvent () 和 postEvent () 可以将自己的事件发送给 Widget。
  • 它剖析常见命令行自变量从而设置其内部状态。见 构造函数文档编制 下文了解更多细节。
  • 它定义应用程序的外观和感觉,封装在 QStyle 对象。这可以改变在运行时采用 setStyle ().
  • 它提供用户可见的字符串本地化凭借 translate ().
  • 它提供某些魔法对象,像 clipboard ().
  • 它知道有关应用程序的窗口。可以询问在某个位置是哪个 Widget 使用 widgetAt (),获取列表为 topLevelWidgets () 和 closeAllWindows (),等。
  • 它管理应用程序的鼠标光标处理,见 setOverrideCursor ()

由于 QApplication 对象会做如此多的初始化,它 must 被创建,在创建用户界面相关的任何其它对象之前。QApplication 还处理常见命令行自变量。因此,创建它通常是一个好主意 before 任何解释或修改对于 argv 的履行在应用程序本身。

函数组
系统设置 desktopSettingsAware (), setDesktopSettingsAware (), cursorFlashTime (), setCursorFlashTime (), doubleClickInterval (), setDoubleClickInterval (), setKeyboardInputInterval (), wheelScrollLines (), setWheelScrollLines (), palette (), setPalette (), font (), setFont (), fontMetrics().
事件处理 exec (), processEvents (), exit (), quit (). sendEvent (), postEvent (), sendPostedEvents (), removePostedEvents (), notify ().
GUI 样式 style (), setStyle ().
文本处理 installTranslator (), removeTranslator () translate ().
小部件 allWidgets (), topLevelWidgets (), activePopupWidget (), activeModalWidget (), clipboard (), focusWidget (), activeWindow (), widgetAt ().
高级光标处理 overrideCursor (), setOverrideCursor (), restoreOverrideCursor ().
杂项 closeAllWindows (), startingUp (), closingDown ().

另请参阅 QCoreApplication , QAbstractEventDispatcher , QEventLoop ,和 QSettings .

特性文档编制

autoSipEnabled : bool

切换自动 SIP (软件输入面板) 可见性

把此特性设为 true 以自动显示 SIP 当整个 Widget 接受键盘输入时。此特性仅影响有设置 WA_InputMethodEnabled 属性的 Widget,且通常用于在拥有很少键 (或没有键) 的设备中发起虚拟键盘。

此特性仅对使用软件输入面板的平台有影响。

默认从属平台。

访问函数:

bool autoSipEnabled () const
void setAutoSipEnabled (const bool enabled )

cursorFlashTime : int

此特性保持文本光标的刷新 (眨眼) 时间,以毫秒为单位

闪烁时间是显示、反转和还原插入符号显示要求的时间。通常,文本光标的显示为光标闪烁时间的一半,接着隐藏为相同时间数,但这可能有所不同。

在 X11,默认值为 1000 毫秒。在 Windows, 控制面板 值被使用且设置此特性将设置所有应用程序的光标闪烁时间。

推荐 Widget 不要缓存此值,因为它可能随时更改,若用户更改全局桌面设置。

注意: 此特性可以保持负值,例如:若光标眨眼被禁用。

访问函数:

int cursorFlashTime ()
void setCursorFlashTime (int)

doubleClickInterval : int

此特性保持的时间限制 (以毫秒为单位) 用于区分双击和连续 2 次鼠标点击

在 X11,默认值为 400 毫秒。在 Windows 和 Mac OS,使用操作系统的值。

访问函数:

int doubleClickInterval ()
void setDoubleClickInterval (int)

keyboardInputInterval : int

此特性保持区分键按下和 2 次连续键按下的时间限制 (以毫秒为单位)

在 X11,默认值为 400 毫秒。在 Windows 和 Mac OS,使用操作系统的值。

访问函数:

int keyboardInputInterval ()
void setKeyboardInputInterval (int)

startDragDistance : int

此特性保持开始拖放操作要求的最小距离。

若应用程序支持拖放,且想要开始拖放操作在用户有按下按钮将光标移动一定距离后,应使用此特性值作为最小要求距离。

例如,若将点击鼠标位置存储在 startPos 且当前位置 (如:在鼠标移动事件中) 为 currentPos , 可以找出是否应采用像这样的代码启动拖拽:

if ((startPos - currentPos).manhattanLength() >=
        QApplication::startDragDistance())
    startTheDrag();
					

Qt 使用此值在内部,如在 QFileDialog .

默认值 (若平台没有提供不同默认值) 为 10 像素。

访问函数:

int startDragDistance ()
void setStartDragDistance (int l )

另请参阅 startDragTime (), QPoint::manhattanLength (),和 拖放 .

startDragTime : int

此特性保持必须保持鼠标按钮按下的时间 (以毫秒为单位),在开始拖放操作之前

若应用程序支持拖放,且想要开始拖放操作在用户有按下鼠标按钮一定时间后,应使用此特性值作为延迟。

Qt 内部也使用此延迟,如在 QTextEdit and QLineEdit ,为开始拖拽。

默认值为 500 毫秒。

访问函数:

int startDragTime ()
void setStartDragTime (int ms )

另请参阅 startDragDistance () 和 拖放 .

styleSheet : QString

此特性保持应用程序样式表

默认情况下,此特性返回空字符串除非用户指定 -stylesheet 选项在命令行当运行应用程序时。

访问函数:

QString styleSheet () const
void setStyleSheet (const QString & sheet )

另请参阅 QWidget::setStyle () 和 Qt 样式表 .

wheelScrollLines : int

此特性保持 Widget 要卷动的行数,当鼠标滚轮旋转时。

若值超过 Widget 可见行数,Widget 应将卷动操作解释成单 page up or page down 。若 Widget 是 项视图类 ,那么导致卷动一 line 从属小部件的设置 卷动模式 。卷动一 line 可以意味着 卷动 1 项 or 卷动 1 像素 .

默认情况下,此属性拥有 3 值。

访问函数:

int wheelScrollLines ()
void setWheelScrollLines (int)

另请参阅 QStyleHints::wheelScrollLines ().

成员函数文档编制

QApplication:: QApplication ( int & argc , char ** argv )

初始化窗口系统并构造应用程序对象采用 argc 命令行自变量在 argv .

警告: 数据引用通过 argc and argv 必须保持有效对于整个生命周期 QApplication 对象。此外, argc 必须大于 0 且 argv 必须包含至少一条有效字符串。

全局 qApp 指针引用此应用程序对象。只应创建一个应用程序对象。

此应用程序对象必须被构造先于任何 描绘设备 (包括小部件、像素图、位图等)。

注意: argc and argv 可能改变当 Qt 移除它识别的命令行自变量时。

所有 Qt 程序自动支持以下命令行选项:

  • -style= style ,设置应用程序 GUI 风格。可能的值从属系统配置。若按额外风格编译 Qt 或将额外风格作为插件,这些将是可用的对于 -style 命令行选项。还可以设置所有 Qt 应用程序的风格,通过设置 QT_STYLE_OVERRIDE 环境变量。
  • -style style ,与上文列出的相同。
  • -stylesheet= stylesheet ,设置应用程序 styleSheet 。值必须是包含样式表的文件路径。

    注意: 样式表文件中的相对 URL 相对于样式表文件路径。

  • -stylesheet stylesheet ,与上文列出的相同。
  • -widgetcount,结束时打印调试信息 (剩余未销毁的 Widget 大约数量和同时存在的 Widget 最大数量)
  • -reverse,将应用程序的布局方向设为 Qt::RightToLeft
  • -qmljsdebugger=,采用指定端口激活 QML/JS 调试器。值格式必须为 port:1234[,block],其中 block 可选且使应用程序等待,直到调试器连接到它为止。

另请参阅 QCoreApplication::arguments ().

[virtual noexcept] QApplication:: ~QApplication ()

清理由此应用程序分配的任何窗口系统资源。设置全局变量 qApp to nullptr .

[static slot] void QApplication:: aboutQt ()

显示关于 Qt 的简单消息框。消息包括应用程序正使用的 Qt 版本号。

这很有用,对于包括 帮助 菜单的应用程序,如展示在 菜单 范例。

此函数是方便槽对于 QMessageBox::aboutQt ().

[static] QWidget *QApplication:: activeModalWidget ()

返回活动的模态 Widget。

模态 Widget 是特殊顶层 Widget 是子类化的 QDialog 将构造函数的模态参数指定为 true。必须关闭模态 Widget 在用户可以继续程序的其它部分之前。

模态 Widget 被组织在堆栈中。此函数返回堆栈顶部的活动模态 Widget。

另请参阅 activePopupWidget () 和 topLevelWidgets ().

[static] QWidget *QApplication:: activePopupWidget ()

返回活动弹出 Widget。

弹出 Widget 是特殊顶层 Widget 有设置 Qt::WType_Popup 小部件标志,如 QMenu 小部件。当应用程序打开弹出 Widget 时,所有事件会被发送给弹出 Widget。正常 Widget 和模态 Widget 无法访问,在关闭弹出 Widget 之前。

只能打开其它弹出 Widget,当展示弹出 Widget 时。弹出 Widget 被组织在堆栈中。此函数返回在堆栈顶部的活动弹出 Widget。

另请参阅 activeModalWidget () 和 topLevelWidgets ().

[static] QWidget *QApplication:: activeWindow ()

返回拥有键盘输入聚焦的应用程序顶层窗口,或 nullptr 若应用程序窗口不拥有聚焦。可能存在 activeWindow(),即使没有 focusWidget (),例如:若该窗口的 Widget 不接受键事件。

另请参阅 QWidget::setFocus (), QWidget::hasFocus (),和 focusWidget ().

[static] void QApplication:: alert ( QWidget * widget , int msec = 0)

导致展示警报 widget 若窗口不是活动窗口。展示警报 msec 毫秒。若 msec 为 0 (默认),则无限期展示警报,直到窗口再次变为活动为止。

目前,此函数在 Qt for Embedded Linux 什么都不做。

在 macOS,这更多地是工作于应用程序级别,且导致应用程序图标会在停放中跳动。

在 Windows,这导致窗口的任务栏条目会闪烁一段时间。若 msec 为 0,闪烁会停止,且任务栏条目将变成不同颜色 (目前为橙色)。

在 X11,这导致窗口会被标记成 "要求关注",窗口不得隐藏 (即:没有对它调用 hide(),但以某种方式可见) 为让这能工作。

[static] QWidgetList QApplication:: allWidgets ()

返回应用程序的所有 Widget 的列表。

列表是空的 ( QList::isEmpty ()) 若没有 Widget。

注意: 某些 Widget 可能被隐藏。

范例:

void updateAllWidgets()
{
    const QWidgetList allWidgets = QApplication::allWidgets();
    for (QWidget *widget : allWidgets)
        widget->update();
}
				

另请参阅 topLevelWidgets () 和 QWidget::isVisible ().

[static] void QApplication:: beep ()

响铃声,使用默认音量和声音。函数 not 可用于 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 () (为 0 若 exit () 被调用凭借 quit ()).

有必要调用此函数以启动事件处理。主事件循环从窗口系统接收事件,并将其分派给应用程序 Widget。

一般来说,在调用 exec() 之前不会发生用户交互。作为特殊情况,模态 Widget 像 QMessageBox 可以在调用 exec() 之前使用,因为模态 Widget 会调用 exec() 以启动本地事件循环。

要使应用程序履行空闲处理 (即:执行特殊函数,每当没有待决事件时),使用 QTimer 采用 0 超时。更高级空闲处理方案可以达成使用 processEvents ().

推荐把清理代码连接到 aboutToQuit () 信号,而不是将它放入应用程序的 main() 函数。这是因为,在某些平台调用 QApplication::exec() 可能不返回。例如,在 Windows 平台,当用户注销时,系统会在 Qt 关闭所有顶层窗口后终止进程。因此, 不保证 应用程序会有时间退出其事件循环并执行代码结束 main() 函数,在调用 QApplication::exec() 后。

另请参阅 quitOnLastWindowClosed , QCoreApplication::quit (), QCoreApplication::exit (), QCoreApplication::processEvents (),和 QCoreApplication::exec ().

[signal] void QApplication:: focusChanged ( QWidget * old , QWidget * now )

此信号被发射当 Widget 键盘聚焦的改变是从 old to now ,即,由于用户按下 tab 键、点击 Widget,或改变活动窗口。两者 old and now 可以是 nullptr .

信号被发射后于 2 小部件被通知即将改变透过 QFocusEvent .

另请参阅 QWidget::setFocus (), QWidget::clearFocus (),和 Qt::FocusReason .

[static] QWidget *QApplication:: focusWidget ()

返回拥有键盘输入聚焦的应用程序 Widget,或 nullptr 若此应用程序的 Widget 不拥有聚焦。

另请参阅 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 )

这是重载函数。

返回 Widget 字体为给定 className .

另请参阅 setFont () 和 QWidget::font ().

[static] bool QApplication:: isEffectEnabled ( Qt::UIEffect effect )

返回 true if effect 被启用;否则返回 false .

默认情况下,Qt 会试着使用桌面设置。要阻止这种情况,调用 setDesktopSettingsAware(false).

注意: 所有效果被禁用,当运行在低于 16 位颜色深度的屏幕。

另请参阅 setEffectEnabled () 和 Qt::UIEffect .

返回 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 )

这是重载函数。

返回用于 Widget 的调色板为给定 className .

另请参阅 setPalette () 和 QWidget::palette ().

[static] void QApplication:: setEffectEnabled ( Qt::UIEffect effect , bool enable = true)

启用 UI 效果 effect if enable 为 True,否则效果将不会被使用。

注意: 所有效果被禁用,当运行在低于 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 有传递,改变仅应用于 Widget 有继承 className (如报告通过 QObject::inherits ())。若 className 为 0,改变影响所有 Widget,从而覆盖任何先前设置的类特定调色板。

调色板可能根据当前 GUI 风格改变在 QStyle::polish ().

警告: 不要使用此函数结合 Qt 样式表 。当使用样式表时,可以使用 color、background-color、selection-color、selection-background-color 及 alternate-background-color 定制 Widget 调色板。

注意: 某些风格不使用调色板对于所有绘制 (例如:若它们使用本机主题引擎)。这是针对 Windows Vista 和 macOS 风格的情况。

另请参阅 QWidget::setPalette (), palette (),和 QStyle::polish ().

[static] void QApplication:: setStyle ( QStyle * style )

将应用程序的 GUI 风格设为 style 。将风格对象的所有权转移给 QApplication ,所以 QApplication 会在应用程序退出时删除风格对象,或者当有设置新风格且旧风格仍是应用程序对象的父级时。

用法范例:

QApplication::setStyle(QStyleFactory::create("Fusion"));
				

当切换应用程序风格时,颜色调色板被设回初始颜色 (或系统默认)。这有必要,由于某些风格必须适配颜色调色板,以完全兼容风格指南。

设置风格在设置调色板之前,即先于创建 QApplication ,将导致应用程序使用 QStyle::standardPalette () 对于调色板。

警告: Qt 样式表目前不支持自定义 QStyle 子类。计划在某些未来发行中解决此问题。

另请参阅 style (), QStyle , setPalette (),和 desktopSettingsAware ().

[static] QStyle *QApplication:: setStyle (const QString & style )

这是重载函数。

请求 QStyle 对象为 style QStyleFactory .

字符串必须是某一 QStyleFactory::keys (),通常是 windows、windowsvista、fusion 或 macos 之一。样式名不区分大小写。

返回 nullptr 若未知 style 被传递,否则 QStyle 返回对象被设为应用程序的 GUI 样式。

警告: 要确保应用程序样式设置正确,最好调用此函数先于 QApplication 构造函数,若可能的话。

[static] QStyle *QApplication:: style ()

另请参阅 setStyle () 和 QStyle .

[static] QWidget *QApplication:: topLevelAt (const QPoint & point )

返回顶层 Widget 按给定 point ;返回 nullptr 若没有这种 Widget。

[static] QWidget *QApplication:: topLevelAt ( int x , int y )

这是重载函数。

返回顶层 Widget 按 point ( x , y );返回 0 若没有这种 Widget。

[static] QWidgetList QApplication:: topLevelWidgets ()

返回应用程序顶层 Widget 窗口的列表。

注意: 某些顶层 Widget 可能被隐藏 (例如:工具提示,若工具提示目前未展示)。

范例:

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 )

返回 Widget 按全局屏幕位置 point ,或 nullptr 若那里没有 Qt Widget。

此函数可能很慢。

另请参阅 QCursor::pos (), QWidget::grabMouse (),和 QWidget::grabKeyboard ().

[static] QWidget *QApplication:: widgetAt ( int x , int y )

这是重载函数。

返回 Widget 按全局屏幕位置 ( x , y ),或 nullptr 若那里没有 Qt Widget。

宏文档编制

qApp

引用唯一应用程序对象的全局指针。它相当于 QCoreApplication::instance (),但铸造作为 QApplication 指针,因此才有效当唯一应用程序对象为 QApplication .

另请参阅 QCoreApplication::instance () 和 qGuiApp .