类介绍
QApplication专门为QGuiApplication提供了一些基于QWidget的应用程序所需的功能,它能处理widget的初始化和终止化处理。对于任何使用Qt的Gui应用程序,无论应用程序在任何给定的时间是否具有0,1,2或者更多窗口,都只有一个QApplication对象。对于非基于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的主要职责范围:
- 使用用户的桌面设置初始化应用程序,如palette(),font(),doubleClickInterval()等,并且跟踪这些属性,以防用户全局更改桌面。
- 执行事件处理,从底层窗口系统接收事件,并派发到相关widget执行。
- 解析常见命令行参数,并相应设置其内部状态。
- 定义应用程序的外观,并封装在QStyle对象中,并且可以使用setStyle()修改。
- 提供用户通过translate()看到字符串的本地化。
- 提供一些特殊的部件处理,比如剪切板,桌面等。
- 提供应用程序的窗口管理。
- 提供应用程序鼠标光标等的管理。
由于QApplication对象进行了大量的初始化,因此必须在创建与用户界面相关的任何其他对象之前创建它。QApplication还处理常见的命令行参数。因此,在应用程序本身对argv进行任何解释或修改之前创建它是一个非常好的方法。
分类 | 函数名 |
---|---|
系统设置 | desktopSettingsAware(), setDesktopSettingsAware(), cursorFlashTime(), setCursorFlashTime(), doubleClickInterval(), setDoubleClickInterval(), setKeyboardInputInterval(), wheelScrollLines(), setWheelScrollLines(), palette(), setPalette(), font(), setFont(), fontMetrics(). |
事件处理 | exec(), processEvents(), exit(), quit(). sendEvent(), postEvent(), sendPostedEvents(), removePostedEvents(), hasPendingEvents(), notify(). |
GUI风格 | style(), setStyle(). |
文字处理 | installTranslator(), removeTranslator() translate(). |
widgets管理 | allWidgets(), topLevelWidgets(), desktop(), activePopupWidget(), activeModalWidget(), clipboard(), focusWidget(), activeWindow(), widgetAt(). |
鼠标光标处理 | overrideCursor(), setOverrideCursor(), restoreOverrideCursor(). |
杂项 | closeAllWindows(), startingUp(), closingDown(). |
属性
autoSipEnabled:bool
切换自动SIP(软件输入面板)可见性。将此属性设置为true可在接受键盘输入的widget时自动显示SIP。此属性仅影响WA_InputMethodEnabled属性集的widget中,通常用于在键很少或者没有键的设备上启动虚拟键盘。默认情况取决于平台。
cursorFlashTime:int
此属性保存文本光标的闪烁事件,单位毫秒。闪烁时间是显示,反转和恢复插入符号显示所需的时间。通常,文本光标会显示闪烁时间的一般,然后隐藏相同的时间,但是也有可能不一样。X11的默认值是1000毫秒。在windows上,使用控制面板的值,设置此属性可以设置所有应用程序的光标闪烁时间。这个属性也可能是负值,如果禁用光标闪烁的话。
doubleClickInterval:int
此属性保持区分双击和连续两次单击鼠标的时间间隔。X11的默认值是400毫秒。在windows和Mac操作系统上,将使用操作系统的值。
globalStrut:QSize
此属性保持用户可以与之交互的任何GUI元素应该具有的最小大小。例如:任何按钮的大小都不应小于globalStrut的大小。在触摸屏或类似I/O设备上使用GUI控件时,应该重新实现来考虑globalStrut大小。
keyboardInputInterval:int
此属性保持区分一次按键和两次连续按键的时间限制,单位毫秒。X11默认值是400毫秒。在windows和Mac系统上,将使用操作系统的值。
startDragDistance:int
如果希望在应用程序中支持拖放,并且希望在用户按住按钮将光标移动一定距离后启动施放操作,则应使用此属性值作为所需的最小距离。
startDragTime:int
此属性保存在开始施放操作之前必须按住鼠标按钮的时间。如果你在应用程序中支持拖放,并且希望在用户按住鼠标一定时间后启动施放操作,则应使用此属性的值作为延迟。
Qt也在内部使用此延迟,例如在QTextEdit和QLineEdit中,用于启动拖动。默认值为500毫秒。
styleSheet:QString
此属性保存应用程序样式表。默认情况下,除非用户在运行程序时在命令行上指定-stylesheet选项,否则此属性返回一个空字符串。
wheelScrollLines:int
当鼠标滚轮旋转时,此属性保存滚动小部件的行数。如果该值超过了widget的可见行数,则widget应将滚动操作解释为向上或向下翻页。如果widget是一个项目视图类,那么滚动一行的结果取决于widget滚动模式的设置。默认情况下,此属性值是3。
windowIcon:QIcon
此属性保存默认窗口图标。
成员函数
[static slot] void QApplication::aboutQt()
显示一个关于Qt的简单消息框。该消息包括应用程序正在使用的Qt的版本号。
[static] QWidget *QApplication::activeModalWidget()
返回活动的模态的widget。
[static] QWidget *QApplication::activePopupWidget()
返回活动的弹出窗口widget。
[static] QWidget *QApplication::activeWindow()
返回具有键盘输入焦点的应用程序顶层窗口。如果没有应用程序窗口具有焦点,则返回0。
[static] void QApplication::alert(QWidget *widget, int msec = 0)
如果窗口不是一个活动窗口,则会显示widget的警报。警报以毫秒为单位显示。如果毫秒为0,则警报无限期显示,直到窗口再次变为活跃状态。
[static] QWidgetList QApplication::allWidgets()
返回应用程序中所有widget列表。
void updateAllWidgets()
{
foreach (QWidget *widget, QApplication::allWidgets())
widget->update();
}
[static] void QApplication::beep()
使用默认音量和声音鸣响铃声。该功能在Qt for Embedded Linux下不可用。
[static slot] void QApplication::closeAllWindows()
关闭所有顶级窗口。
[static] QDesktopWidget *QApplication::desktop()
返回桌面widget(根窗口)。
[override virtual protected] bool QApplication::event(QEvent *e)
重新实现。
[static] int QApplication::exec()
开启事件循环。
[signal] void QApplication::focusChanged(QWidget *old, QWidget *now)
当键盘焦点事件从一个widget变到另一个widget上,发出此信号。
[static] QWidget *QApplication::focusWidget()
返回键盘焦点事件所在的widget,如果没有,则返回0。
[static] QFont QApplication::font()
返回默认的应用程序字体。
[static] QFont QApplication::font(const QWidget *widget)
这是一个重载函数,返回指定widget的字体。
[static] QFont QApplication::font(const char *className)
这是一个重载函数,返回给定className名的widget的字体。
[static] QFontMetrics QApplication::fontMetrics()
返回应用程序字体在屏幕上显示的宽度。
[static] bool QApplication::isEffectEnabled(Qt::UIEfffect effect)
如果启用了该效果,返回true,否则返回false。默认情况下,Qt尝试使用桌面设置。为防止该情况发生,请调用setDesktopSettingsAware(false)。
[static] Qt::NavigationMode QApplication::navigationMode()
返回Qt使用的焦点导航类型。此功念仅在Qt for Embedded Linux中可用。
[override virtual] bool QApplication::notify(QObject *receiver, QEvent *e)
重写实现了QGuiApplication::notify函数。
[static] QPalette QApplication::palette(const QWidget *widget)
返回widget的调色板。
[static] QPalette QApplication::palette(const char *className)
返回指定名字className的widget的调色板。
[static] void QApplication::setActiveWindow(QWidget *active)
设置active为响应系统事件的活跃窗口。
[static] void QApplication::setEffectEnabled(Qt::UIEffect effect, bool enable = true)
如果enable是true,则启动UIEffect的效果。
[static] void QApplication::setFont(const QFont &font, const char *className = nullptr)
修改应用程序的默认字体为font。
[static] void QApplication::setNavigationMode(Qt::NavigationMode mode)
[static] void QApplication::setPalette(const QPalette &palette, const char *className = nullptr)
[static] void QApplication::setStyle(QStyle *style)
将应用程序的GUI样式设置为style。样式对象的所有权将转移到QApplication,因此QApplication将在应用程序退出时删除样式对象。
[static] QStyle *QApplication::setStyle(const QString &style)
从QStyleFactory中返回一个QStyle对象。字符串必须是QStyleFactory::keys()中的一个。样式名称不区分大小写。如果传递了未知样式,则返回nullptr。否则返回的QStyle对象将设置为应用程序的GUI样式。
[static] QStyle *QApplication::style()
返回应用程序的样式对象。
[static] QWidgetList QApplication::topLevelWidgets()
返回应用程序顶级窗口的列表。
void showAllHiddenTopLevelWidgets()
{
const QWidgetList topLevelWidgets = QApplication::topLevelWidgets();
for (QWidget *widget : topLevelWidgets) {
if (widget->isHidden())
widget->show();
}
}
[static] QWidget *QApplication::widgetAt(const QPoint &point)
返回全局屏幕坐标point位置的widget。若没有widget则返回nullptr。
[static] QWidget *QApplication::widgetAt(int x, int y)
返回全局屏幕坐标(x, y)位置的widget。若没有widget则返回nullptr。
宏
qApp
引用唯一应用程序对象的全局指针。等效于QCoreApplication::instance(),但是被转换为QApplication指针。