QSplashScreen

关注
义项:Qt启动画面类
QSplashScreen

QSplashScreen是Qt应用程序开发框架中QtWidgets模块提供的一个窗口部件类,用于在程序启动阶段显示启动画面(闪屏)。它通常被用在启动耗时较长的数据库类或网络类程序中,向用户反馈程序正在加载。该类继承自QWidget,可通过构造函数指定显示的位图,并支持在画面上叠加文字提示。[1]

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

QSplashScreen是Qt框架中用于呈现启动画面的窗口部件类,定义在QtWidgets模块内,使用前需在代码中引入对应的头文件,并在构建配置中链接QtWidgets组件。它直接继承自QWidget,因此具备普通窗口部件的全部基本特征,同时额外提供启动画面所需的显示与消息控制接口。[1]

按照官方文档的说明,启动画面是一种通常在应用程序启动时显示的窗口部件。对于启动过程需要较长时间的应用,例如要与数据库或网络建立连接的程序,启动画面能够提示用户程序正在加载,从而避免启动阶段界面无响应造成的困惑。[2]

该类的常用接口包括构造函数、设置与读取位图的setPixmap与pixmap、显示文字消息的showMessage与clearMessage、结束显示并等待主窗口出现的finish,以及可供子类重写的受保护函数drawContents。当画面上的消息发生变化时,还会发出messageChanged信号。[3]

原理

QSplashScreen本质上是一个承载位图的顶层窗口部件,构造时传入一个QPixmap对象作为画面内容,窗口默认出现在屏幕中央。若希望在等待主界面构建期间让画面停留在桌面最上层,可以把Qt::WindowStaysOnTopHint加入窗口标志;由于部分X11窗口管理器并不支持这一标志,Qt文档给出的替代方案是设置定时器周期性调用raise()来模拟置顶效果。[2]

文字提示的绘制由showMessage完成:它在位图之上按指定对齐方式和颜色绘制一段消息,并立即触发重绘以保证内容与程序动作同步,例如在加载模块或建立连接的时刻更新提示。clearMessage用于清除这段文字,而pixmap()返回的是不含文字的原始位图。若需要自定义绘制效果,可以继承该类并重写drawContents函数,默认实现只负责绘制showMessage传入的文本。[3]

启动画面一般显示在事件循环启动之前,此时鼠标事件不会自动分发。文档因此建议在启动过程中周期性地调用QApplication::processEvents()处理挂起事件,用户点击启动画面即可将其隐藏。finish函数的做法则是让画面一直保留,直到指定的主窗口显示出来,再自行调用关闭。

发展历程

QSplashScreen在Qt的早期版本中即已存在。在Qt 3时代的文档中,该类的公共槽以message命名,用于在画面上绘制提示文本,清除消息的槽则名为clear。当时的文档已描述置顶标志、X11窗口管理器兼容方案以及通过处理事件接收鼠标点击等行为,可见其基本设计在这些版本中已经确立。[4]

Qt 4时期该类的文档标注其所属模块为QtGui,继承关系与主要接口保持不变。进入Qt 6后,QSplashScreen被归入QtWidgets模块,构建时需通过CMake的find_package(Qt6 REQUIRED COMPONENTS Widgets)或qmake的QT += widgets引入,接口名称与职责延续至今。

除C++接口外,Qt的Python绑定也提供了对应类型,PySide6的QtWidgets模块包含QSplashScreen类,其API与C++版本基本一致,构造函数、finish、showMessage等方法均可直接使用。[5][3]

应用

最常见的用法是在主窗口显示之前先显示启动画面,并在画面停留期间完成初始化工作。典型代码把QPixmap、QSplashScreen与主窗口对象依次创建,先调用show显示启动画面并处理事件,创建完成后再调用finish结束画面并进入事件循环。[1]

对于启动过程分阶段的程序,可以在不同阶段调用showMessage更新提示信息,例如先给出模块加载的进度,再给出连接已建立的状态,使画面内容与后台动作保持一致。[6]

在多显示器环境下,该类提供接收QScreen参数的构造函数,可以把启动画面指定到主屏之外的显示器上显示,这在多屏工作站的应用中较为实用。[1]

局限

QSplashScreen本身只负责显示一张位图并叠加文字,并不包含任何进度计算能力。它无法自动获知初始化任务的完成比例,画面上的进度信息需要由开发者自行在合适位置调用showMessage来更新,因此其反映的加载状态取决于程序代码的写入位置。

由于启动画面通常在事件循环运行之前显示,鼠标点击、窗口重绘等交互不会被自动处理。文档明确指出需要周期性地调用QApplication::processEvents(),否则点击隐藏画面的功能不会生效;这也意味着启动阶段的事件处理需要开发者主动安排。

置顶显示并非在所有平台上都能由窗口系统直接保证。文档说明部分X11窗口管理器不支持置顶标志,只能通过定时调用raise()来近似实现,这一做法属于权宜手段。[2]

参见

  • Qt —— QSplashScreen所属的跨平台应用程序开发框架。

  • QWidget —— QSplashScreen直接继承的窗口部件基类。

  • QPixmap —— 用于提供启动画面图像的位图类。

  • QPainter —— 在drawContents等函数中执行绘制操作的绘图类。

  • QApplication —— 负责事件分发、其processEvents方法与启动画面交互相关的应用类。

参考资料

  1. QSplashScreen 类 [引用日期2026-10-14]
  2. QSplashScreen Class [引用日期2026-10-14]
  3. 概要 - Qt for Python [引用日期2026-10-14]
  4. manpages.org 上的网页 [引用日期2026-10-14]
  5. Synopsis [引用日期2026-10-14]
  6. QSplashScreen Klasse [引用日期2026-10-14]
词条评价
词条统计

浏览次数:1 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T18:44:53Z

历史版本

本条目引用的词条
Qt QWidget QPixmap QPainter QApplication