QSplashScreen 类

QSplashScreen 小部件提供了可以在应用程序启动时显示的启动画面。 更多...

头文件 #include <QSplashScreen>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QWidget

公共函数

QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags())
QSplashScreen(QScreen *screen, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags())
虚拟~QSplashScreen()
voidfinish(QWidget *mainWin)
QStringmessage() const
const QPixmappixmap() const
voidrepaint()
voidsetPixmap(const QPixmap &pixmap)

公共槽

voidclearMessage()
voidshowMessage(const QString &message, int alignment = Qt::AlignLeft, const QColor &color = Qt::black)

信号

voidmessageChanged(const QString &message)

受保护函数

virtual voiddrawContents(QPainter *painter)

重写的受保护函数

virtual boolevent(QEvent *e) override
virtual voidmousePressEvent(QMouseEvent *) override

详细描述

启动画面是在应用程序启动时通常会显示的窗口小部件。对于启动时间较长的应用程序(例如,需要建立连接的数据库或网络应用程序)来说,启动画面可以提供给用户应用程序正在加载的反馈。

启动画面显示在屏幕中央。如果想要让启动画面的窗口始终位于其他桌面上方的窗口之上,可以将 Qt::WindowStaysOnTopHint 添加到启动画面的窗口标记中。

一些X11窗口管理器不支持“始终在顶部”的标志。一种解决方案是为启动画面设置一个定时器,周期性地调用 raise() 模拟“始终在顶部”的效果。

最常见的用法是在主部件显示在屏幕上之前显示启动画面。以下代码片段说明了这一点,其中显示了启动画面并执行了一些初始化任务,然后显示应用程序的主窗口。

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QPixmap pixmap(":/splash.png");
    QSplashScreen splash(pixmap);
    splash.show();
    app.processEvents();
    ...
    QMainWindow window;
    window.show();
    splash.finish(&window);
    return app.exec();
}

用户可以通过用鼠标点击启动画面来隐藏它。为了使鼠标处理能正常工作,需要在启动期间定期调用 QApplication::processEvents()。

有时更新启动画面以显示消息是有用的,例如,在应用程序启动期间宣布建立的连接或加载的模块。

QPixmap pixmap(":/splash.png");
QSplashScreen *splash = new QSplashScreen(pixmap);
splash->show();

... // Loading some items
splash->showMessage("Loaded modules");

QCoreApplication::processEvents();

... // Establishing connections
splash->showMessage("Established connections");

QCoreApplication::processEvents();

QSplashScreen通过showMessage()功能支持此功能。如果您想要进行自己的绘图,可以使用pixmap()获取用于启动画面的像素图的指针。或者,您可以继承QSplashScreen并重新实现drawContents()。

在多个屏幕的情况下,也可以在除主屏幕外的其他屏幕上显示启动画面。例如

QScreen *screen = QGuiApplication::screens().at(1);
QPixmap pixmap(":/splash.png");
QSplashScreen splash(screen, pixmap);
splash.show();

成员函数文档

[显式] QSplashScreen::QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags())

构建一个将显示pixmap的启动画面。

通常不需要设置窗口标志,f,除非需要设置Qt::WindowStaysOnTopHint

QSplashScreen::QSplashScreen(QScreen *screen, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags())

这是一个重载函数。

此函数允许您指定启动画面的屏幕。此构造函数的典型用途是在您有多个屏幕并希望启动画面显示在主屏幕之外时。在这种情况下,传递正确的screen

[虚 noexcept] QSplashScreen::~QSplashScreen()

析构函数。

[槽函数] void QSplashScreen::clearMessage()

移除正在启动画面上显示的消息

参见showMessage().

[虚受保护] void QSplashScreen::drawContents(QPainter *painter)

使用绘图器painter绘制启动画面的内容。默认实现使用showMessage()传递的消息进行绘图。如果想要在启动画面上进行自己的绘图,则需要重新实现此函数。

[覆盖虚受保护] bool QSplashScreen::event(QEvent *e)

重新实现: QWidget::event(QEvent *event).

void QSplashScreen::finish(QWidget *mainWin)

在调用自身的 close() 之前,使启动窗口等待窗口 mainWin 显示。

QString QSplashScreen::message() const

返回当前在启动窗口上显示的消息。

另请参阅showMessage() 和 clearMessage().

[信号] void QSplashScreen::messageChanged(const QString &message)

当启动窗口上的消息改变时,会发出此信号。message 是新的消息,如果不显示消息则是空字符串。

另请参阅showMessage() 和 clearMessage().

[重载虚受保护的] void QSplashScreen::mousePressEvent(QMouseEvent *)

重新实现: QWidget::mousePressEvent(QMouseEvent *event).

const QPixmap QSplashScreen::pixmap() const

返回用于启动窗口的位图。图像不包括由 showMessage() 调用的文本生成的任何文本。

另请参阅setPixmap().

void QSplashScreen::repaint()

这覆盖了 QWidget::repaint。它与传统重新绘制函数的不同之处在于,它还调用 QCoreApplication::processEvents() 以确保更新被显示,即使在没有事件循环的情况下。

void QSplashScreen::setPixmap(const QPixmap &pixmap)

将作为启动窗口图像使用的位图设置为 pixmap

另请参阅pixmap().

[槽函数] void QSplashScreen::showMessage(const QString &message, int alignment = Qt::AlignLeft, const QColor &color = Qt::black)

以颜色 color 在启动窗口上绘制文本 message 并根据 alignment 中的标志对齐文本。这个函数调用 repaint(),确保启动窗口立即重新绘制。因此,消息与您的应用程序正在执行的操作(例如加载文件)保持同步。

另请参阅Qt::AlignmentclearMessage() 和 message().

© 2024 The Qt Company Ltd. 包含在此处的文档贡献的版权属于各自的所有者。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 条款许可的。Qt 和相应的商标是 The Qt Company Ltd. 在芬兰以及全球其他国家/地区的商标。所有其他商标均为各自所有者的财产。