【QT】实现应用程序启动画面
方案一:使用QSplashScreen实现
QSplashScreen小部件提供可一个启动画面,在应用程序启动期间显示。
使用注意事项
使用QSplashScreen类需要添加头文件#include<QSplashScreen
;
编译配置要求:
- CMake需添加:find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets)
- qmake需添加:QT += widgets
注:该类继承自QWidget
详细说明
当应用程序启动时间较长时(如需要建立数据库连接或网络连接的场景),可通过QSplashScreen向用户展示加载状态。
QSplashScreen默认居中显示启动画面。如需保持画面置顶,可设置Qt::WindowsStaysOnTopHint标志。若该标志不被支持,可通过设置定时器调用raise()方法模拟置顶效果。
QSplashScreen最常见的用法是在屏幕上显示主窗体之前显示启动画面。
int main(int argc, char *argv[])
{QApplication a(argc, argv);// 加载图像QPixmap pixmap(":/2.png");// 创建QSplashScreen对象QSplashScreen splash(pixmap, Qt::WindowStaysOnTopHint);// 显示splashsplash.show();// 鼠标单击会隐藏启动画面,如果要使鼠标处理正常工作,在启动期间调用QApplication::processEvents()a.processEvents();MainWindow w;w.show();// 应用程序初始化完成,结束初始屏幕splash.finish(&w);return a.exec();
}
另外使用消息更新启动画面也很有用,比如在程序启动时宣布已建立连接或加载模块:
int main(int argc, char *argv[])
{QApplication a(argc, argv);QPixmap pixmap(":/2.png");QSplashScreen *splash = new QSplashScreen(pixmap, Qt::WindowStaysOnTopHint);splash->show();// 加载某些项splash->showMessage("loaded some items");QApplication::processEvents();// 建立连接splash->showMessage("Established connections");;QApplication::processEvents();QMainWindow w;w.show();// 应用程序初始化完成,结束初始屏幕splash->finish(&w);return a.exec();
}
如果有多个屏幕,也可以在与主屏幕不同的屏幕上显示启动画面:
// 实现其他屏幕的初始屏幕
int main(int argc, char *argv[])
{QApplication a(argc, argv);// 获取屏幕数量QScreen *screen = QApplication::screens().at(1);QPixmap pixmap(":/2.png");QSplashScreen splash(pixmap, Qt::WindowStaysOnTopHint);splash.show();a.processEvents();QMainWindow w;w.show();splash.finish(&w);return a.exec();
}
常用方法
QSplashScreen类提供5个公共方法:
finish()
:等待目标窗口显示后关闭启动画面message()
:获取当前显示的消息pixmap()
:获取当前使用的图像repaint()
:重绘画面并处理事件setPixmap()
:设置显示图像
提供1个protected方法:
drawContents()
:绘制画面内容
提供2个槽函数:
clearMessage()
:清除显示消息showMessage()
:显示指定文本
提供1个信号:
messageChanged()
:消息变化时触发
继承自该类的子类需要重新实现event()
、mousePressEvent()
。