QSplashScreen Class :Qt程序启动画面类
QSplashScreen类是QT环境提供的程序启动画面组件(widget:我喜欢称组件,当然大家都叫他部件),提供了一个启动屏幕,可以在应用程序启动期间显示它。为后续的应用程序初始化赢得时间。
目录
QSplashScreen Class :Qt程序启动画面类
Reimplemented Protected Functions:重新实现保护函数:同名同参覆盖:virtual多态实现。
void QSplashScreen::clearMessage() [slot]
void QSplashScreen::messageChanged(const QString&message) [signal]
QSplashScreen::~QSplashScreen() [virtual]
void QSplashScreen::drawContents(QPainter*painter) [virtual protected]
bool QSplashScreen::event(QEvent *e) [override virtual protected]
void QSplashScreen::finish(QWidget *mainWin)
QString QSplashScreen::message() const
void QSplashScreen::mousePressEvent(QMouseEvent * event) [override virtual protected]
const QPixmap QSplashScreen::pixmap() const
void QSplashScreen::setPixmap(const QPixmap &pixmap)
QSplashScreen类的名片信息:
Header: | #include <QSplashScreen> |
qmake: | QT += widgets |
Inherits: | QWidget |
Public Functions 公共函数:
构造函数 | QSplashScreen(QWidget *parent, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags()) |
构造函数 | QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags()) |
virtual | ~QSplashScreen() |
void | finish(QWidget *mainWin) |
QString | message() const |
const QPixmap | pixmap() const |
void | repaint() |
void | setPixmap(const QPixmap &pixmap) |
Public Slots 公共槽函数:
void | clearMessage() |
void | showMessage(const QString &message, int alignment = Qt::AlignLeft, const QColor &color = Qt::black) |
Signals 信号:
void | messageChanged(const QString &message) |
Protected Functions 保护函数:
virtual void | drawContents(QPainter *painter) |
Reimplemented Protected Functions:重新实现保护函数:同名同参覆盖:virtual多态实现。
virtual bool | event(QEvent *e) override |
virtual void | mousePressEvent(QMouseEvent *) override |
详细说明:
在程序初始化时,往往我们需要一个启动画面,也成为欢迎画面、初始画面。 启动画面通常用于启动时间较长的应用程序(例如需要花费时间来建立连接的数据库或网络应用程序),以向用户提供应用程序正在加载的反馈,以告诉客户程序正在正常运行,并没有出现故障。
正常情况下我们会把启动画面放在屏幕的正中央。如果我们还想把启动画面放在其他所有软件的最前面,也就是不让其他软件遮挡住我们的启动画面,我们应该使用Qt :: WindowStaysOnTopHint标志。实例:
//因为QSplashScreen类实现的组件本身就是无边框界面所以我们可以省略Qt::FramelessWindowHint
//this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
//正确的写法是只添加Qt::WindowStaysOnTopHint标志
setWindowFlags(Qt::WindowStaysOnTopHint);
//设置全屏显示。
this->showFullScreen();
某些X11窗口管理器不支持Qt :: WindowStaysOnTopHint标志 (停留顶部标志)。 一种解决方案是设置一个计时器,该计时器在启动屏幕上定期调用raise()以模拟“停留在顶部”的效果。
X11也叫做X Window系统,X Window系统 (X11或X)是一种 位图 显示的 视窗系统 。它是在 Unix 和 类Unix 操作系统 ,以及 OpenVMS 上建立图形用户界面 的标准工具包和协议,并可用于几乎所有已有的现代操作系统。
QSplashScreen类最常见的用法是在主窗口显示在屏幕上之前显示初始屏幕。下面的代码片段说明了这一点,其中显示了初始屏幕,并在显示应用程序主窗口之前执行了一些初始化任务:
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();
}
用户可以用鼠标点击启动界面来隐藏初始屏幕。由于启动屏幕通常在事件循环开始运行之前显示,因此需要定期调用QCoreApplication::processEvents()以接收鼠标单击。
有时用消息更新启动屏幕是很有用的,例如,在应用程序启动时宣布连接已建立或模块已加载:
QPixmap pixmap(":/splash.png");
QSplashScreen *splash = new QSplashScreen(pixmap);
splash->show();
... // Loading some items
splash->showMessage("Loaded modules");
qApp->processEvents();
... // Establishing connections
splash->showMessage("Established connections");
qApp->processEvents();
showMessage效果:
qsprashscreen通过showMessage()函数支持此功能。如果您想绘制自己的图形,可以使用pixmap()获得一个指向启动屏幕中使用的pixmap的指针。或者,可以继承qsprashscreen类,重新实现drawContents()方法。
成员函数文档:
QSplashScreen::QSplashScreen(QWidget*parent, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags())
这是一个重载函数。
此函数允许您为splashscreen指定父级。此构造函数的典型用途是,如果您有多个屏幕,并且希望在不同于主屏幕的屏幕上显示初始屏幕。在这种情况下,传递正确的desktop()作为父级。
QSplashScreen::QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags())
构造一个初始屏幕,将显示像素图。
因为QsplashScreen为特别定制的窗口类型,我们一般除了设置f = Qt::WindowFlags()标志,其他标志不需要设置。
void QSplashScreen::clearMessage() [slot]
删除初始屏幕上显示的消息
与之对应的函数:showMessage()。
void QSplashScreen::messageChanged(const QString&message) [signal]
当初始屏幕上的消息更改时,将发出此信号。 message是新消息,并且在删除消息后为空字符串。
与之有关联的函数:showMessage() 和 clearMessage()。
void QSplashScreen::showMessage(const QString &message, int alignment = Qt::AlignLeft, const QColor &color = Qt::black) [slot]
将消息文本以彩色绘制到初始屏幕上,并根据对齐的标志对齐文本。此函数调用repaint()以确保立即重新绘制初始屏幕。因此,该消息与应用程序正在执行的操作(例如加载文件)保持最新。
与之有关联的函数与声明: Qt::Alignment, clearMessage(), and message()。
Qt::Alignment:
水平标记:
常数 | 值 | 说明 |
---|---|---|
Qt::AlignLeft | 0x0001 | 与左边缘对齐。 |
Qt::AlignRight | 0x0002 | 与右边缘对齐。 |
Qt::AlignHCenter | 0x0004 | 在可用空间中水平居中。 |
Qt::AlignJustify | 0x0008 | 对齐可用空间中的文本。 |
垂直标志:
常数 | 值 | 说明 |
---|---|---|
Qt::AlignTop | 0x0020 | 与顶部对齐。 |
Qt::AlignBottom | 0x0040 | 与底部对齐。 |
Qt::AlignVCenter | 0x0080 | 在可用空间中垂直居中。 |
Qt::AlignBaseline | 0x0100 | 与基线对齐。 |
二维标志:
常数 | 值 | 说明 |
---|---|---|
Qt::AlignCenter | AlignVCenter | AlignHCenter | 在两个维度上均居中。 |
一次最多可以使用一个水平和一个垂直标志。Qt::AlignCenter计算为水平和垂直。
三个枚举值对于可以从右向左模式运行的应用程序非常有用:
常数 | 值 | 说明 |
---|---|---|
Qt::AlignAbsolute | 0x0010 | 如果小部件的布局方向是Qt::right to left(而不是默认的Qt::left to right),Qt::AlignLeft表示右边缘,Qt::AlignRight表示左边缘。这通常是期望的行为。如果希望Qt::AlignLeft始终表示“left”,Qt::AlignRight始终表示“right”,请将标志与Qt::AlignAbsolute组合。 |
Qt::AlignLeading | AlignLeft | |
Qt::AlignTrailing | AlignRight |
对齐组合:
常数 | 值 |
---|---|
Qt::AlignHorizontal_Mask | AlignLeft | AlignRight | AlignHCenter | AlignJustify | AlignAbsolute |
Qt::AlignVertical_Mask | AlignTop | AlignBottom | AlignVCenter | AlignBaseline |
QSplashScreen::~QSplashScreen() [virtual]
析构函数。
void QSplashScreen::drawContents(QPainter*painter) [virtual protected]
使用Painter 绘制初始屏幕的内容。 默认实现绘制showMessage()传递的消息。 如果要在初始屏幕上绘制自己的图形,请重新实现此功能。
bool QSplashScreen::event(QEvent *e) [override virtual protected]
重新实现event【事件】功能函数。
void QSplashScreen::finish(QWidget *mainWin)
使初始屏幕等待窗口小部件mainWin显示,然后对其本身调用close()。
QString QSplashScreen::message() const
返回当前在启动屏幕上显示的消息。
Qt 5.2中引入了此功能。
void QSplashScreen::mousePressEvent(QMouseEvent * event) [override virtual protected]
重新实现鼠标按下事件。
const QPixmap QSplashScreen::pixmap() const
返回初始屏幕中使用的像素图。 该图像不包涵showMessage()调用绘制的任何文本。
与之相关联的函数: setPixmap()。
void QSplashScreen::repaint()
这将覆盖QWidget::repaint()。它不同于标准的重绘函数,因为它还调用QCoreApplication::processEvents()以确保显示更新,即使不存在事件循环。
void QSplashScreen::setPixmap(const QPixmap &pixmap)
将用作启动屏幕图像的像素映射设置为像素映射。
与之相关联的函数: pixmap()。
QSplashScreen类在使用中,关系最密切的应该是QPixmap类、QPainter类。