当前位置: 首页 > news >正文

【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()

http://www.lryc.cn/news/589345.html

相关文章:

  • 封装---统一处理接口与打印错误信息
  • 2025/7/15——java学习总结
  • 网页源码保护助手 海洋网页在线加密:HTML 源码防复制篡改,密文安全如铜墙铁壁
  • 全局 WAF 规则:构筑 Web 安全的坚固防线
  • 【12】MFC入门到精通——MFC 消息对话框 MessageBox()和AfxMessageBox() 解析 示例 及 应用实例
  • Kafka与Flink打造流式数据采集方案:以二手房信息为例
  • C++ Filesystem Library 全解
  • 20250715正面看MIPI接口的LCD屏正常,侧面看发红是什么原因?
  • 12.6 Google黑科技GShard:6000亿参数MoE模型如何突破显存限制?
  • C++-linux系统编程 8.进程(三)孤儿进程、僵尸进程与进程回收
  • 算法学习笔记:22.贪心算法之霍夫曼编码 ——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 多相机depth-rgb图组完整性分拣器_MATLAB实现
  • 魔搭官方教程【快速开始】-swift 微调报错:`if v not in ALL_PARALLEL_STYLES`
  • 线上项目-升级redis8.0.3遇到的错
  • iOS高级开发工程师面试——关于网络
  • el-tooltip 快速滚动的时候出现残影如何解决 vue3
  • 学习嵌入式的第二十八天-数据结构-(2025.7.15)进程和线程
  • 20250715武汉xx公司面试一面
  • [AI-video] Web UI | Streamlit(py to web) | 应用配置config.toml
  • 索尼(SONY)摄像机mp4文件删除覆盖的恢复方法
  • 如何选择影视会员api接口?
  • 【字节跳动】数据挖掘面试题0019:带货直播间推荐:现在有一个带货的直播间,怎么把它精准地推送给有需要的用户
  • Flutter 入门指南:从基础到实战
  • 劳务派遣vs劳务外包:HR必懂的区别
  • 场景设计题+智力题
  • 《星盘接口9:永恒之门》
  • flutter下的webview适配rem问题
  • easy-springdoc
  • 手撕线程池详解(C语言源码+解析)
  • 35.KMP 算法