Qt 实现软件启动界面动画

实现软件启动界面,用到QSplashScreen类。

效果

启动界面

描述

QSplashScreen小部件提供了一个可以在应用程序启动期间显示的启动画面。
启动画面通常是在应用程序启动时显示的小部件。启动画面通常用于启动时间较长的应用程序(例如需要花费一些时间来建立连接的数据库或网络应用程序),以向用户提供应用程序正在加载的反馈信息。

启动画面会出现在屏幕的中央。如果希望将启动画面保持在所有其他窗口之上,在启动画面的窗口标志中添加Qt::WindowStaysOnTopHint可能会很有用。

一些X11窗口管理器不支持"窗口保持在顶部"标志。解决方法是设置一个定时器,定期对启动画面调用raise()函数,以模拟"窗口保持在顶部"的效果。

最常见的用法是在显示主窗口之前显示启动画面。
下面的代码片段演示了此用法,其中显示了一个启动画面并在显示应用程序的主窗口前执行一些初始化任务:

 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 QSScreen(pixmap);
splash->show();... // 加载一些项
splash->showMessage("已加载模块");qApp->processEvents();... // 建立连接
splash->showMessage("正在建立连接");qApp->processEvents();

QSplashScreen支持使用showMessage()函数进行这样的操作。如果希望进行自定义绘制,可以使用pixmap()函数获取启动画面使用的位图的指针。或者,可以子类化QSplashScreen并重新实现drawContents()函数。

常用函数

  1. 构造函数:

    • QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags()):使用给定的位图和窗口标志构造一个QSplashScreen对象。
  2. 显示和隐藏:

    • void show():显示启动画面。
    • void finish(QWidget *mainWindow):隐藏启动画面,并将其关联到指定的主窗口。在调用此函数之前,通常会在显示主窗口前执行一些初始化任务。
    • void clearMessage():清除启动画面上显示的消息。
  3. 位图相关:

    • void setPixmap(const QPixmap &pixmap):设置启动画面使用的位图。
    • const QPixmap *pixmap() const:返回启动画面使用的位图的指针。
  4. 消息显示:

    • void showMessage(const QString &message, int alignment = Qt::AlignBottom | Qt::AlignCenter, const QColor &color = Qt::black):在启动画面上显示消息。可以设置消息的对齐方式和颜色。
  5. 其他:

    • void raise():将启动画面置于顶层。
    • bool isFullScreen() const:判断启动画面是否为全屏模式。
    • void setEnabled(bool enabled):设置启动画面是否可用。
    • void setAutoFillBackground(bool enabled):设置是否自动填充启动画面的背景。

子类化示例

.h

#ifndef SCREEN_H
#define SCREEN_H#include <QWidget>
#include <QSplashScreen>namespace Ui {
class C_Screen;
}class C_Screen : public QSplashScreen
{Q_OBJECTpublic:explicit C_Screen(QWidget *parent = nullptr);~C_Screen();private:Ui::C_Screen *ui;
};#endif // SCREEN_H

.cpp

#include "Screen.h"
#include "ui_Screen.h"#include <QPixmap>
#include <QFont>C_Screen::C_Screen(QWidget *parent) :QSplashScreen(parent),ui(new Ui::C_Screen)
{ui->setupUi(this);QString strScreen = ":/images/screen1.png";QFont font = this->font();font.setPixelSize(23);setFont(font);QPixmap loadingPix(strScreen);setPixmap(loadingPix);}C_Screen::~C_Screen()
{delete ui;
}

在.main调用

    C_Screen screen;screen.show();screen.showMessage("程序正在加载......", Qt::AlignTop|Qt::AlignRight, Qt::red);QDateTime time = QDateTime::currentDateTime();QDateTime currentTime = QDateTime::currentDateTime();   //记录当前时间// 可以添加处理业务while (time.msecsTo(currentTime) <= 1000)                   //1000为需要延时的毫秒数{currentTime = QDateTime::currentDateTime();}for(int i = 0; i < 3; ++i){screen.showMessage(QString("请稍等%1......").arg(3-i), Qt::AlignTop|Qt::AlignRight, Qt::red);time = currentTime;while (time.msecsTo(currentTime) <= 1000)                   //1000为需要延时的毫秒数{currentTime = QDateTime::currentDateTime();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实现双目标定、畸变矫正、立体矫正

一&#xff0c;双目标定、畸变矫正、立体矫正的作用 双目目标定&#xff1a; 3D重建和测距&#xff1a;通过双目目标定&#xff0c;您可以确定两个摄像头之间的相对位置和朝向&#xff0c;从而能够根据视差信息计算物体的深度&#xff0c;进行三维重建和测距。姿态估计&#xf…

Ubuntu部署docker及docker常用操作

Ubuntu上安装Docker步骤&#xff1a; 更新软件包列表&#xff1a; sudo apt update安装一些必要的软件包&#xff0c;以便您可以通过HTTPS使用存储库&#xff1a; sudo apt install apt-transport-https ca-certificates curl software-properties-common添加Docker的官方GP…

CVE-2022-22963 Spring Cloud Function SpEL命令注入

一、简介 Spring Cloud Function 是基于 Spring Boot的函数计算框架。该项目致力于促进函数为主的开发单元&#xff0c;它抽象出所有传输细节和基础架构&#xff0c;并提供一个通用的模型&#xff0c;用于在各种平台上部署基于函数的软件。在Spring Cloud Function相关版本&am…

在3台不联网的 CentOS 7.8 服务器上部署 Elasticsearch 6.8 集群

为了在3台不联网的 CentOS 7.8 服务器上部署 Elasticsearch 6.8.23 集群&#xff0c;并考虑到path.data和path.logs的配置&#xff0c;我们可以按照以下步骤进行操作&#xff1a; 1. 准备工作 1.1 从有网络的机器下载 Elasticsearch 6.8.23 的 RPM 包&#xff1a; https://w…

京东平台数据分析:2023年9月京东空气净化器行业品牌销售排行榜

鲸参谋监测的京东平台9月份空气净化器市场销售数据已出炉&#xff01; 9月份&#xff0c;空气净化器的销售同比上年增长。根据鲸参谋平台的数据显示&#xff0c;今年9月&#xff0c;京东平台空气净化器的销量将近15万&#xff0c;同比增长约1%&#xff1b;销售额将近2亿元&…

低代码平台深度剖析

随着数字化转型的不断推进&#xff0c;低代码平台也在高速发展中。越来越多的企业开始慢慢习惯于低代码平台的优势&#xff0c;并从中获益。低代码平台厂商也在不断推陈出新&#xff0c;以跟紧市场变化&#xff0c;简化开发者的工作。 一、什么是低代码平台&#xff1f; 低代码…

Mac版好用的Git客户端 Fork 免激活

Fork是一款强大的Git客户端软件&#xff0c;在Mac和Windows操作系统上都可以使用。汇集了众多先进的功能和工具&#xff0c;可以帮助用户更方便地管理和控制Git仓库。 Fork的界面简洁直观&#xff0c;易于使用。它提供了许多高级的Git功能&#xff0c;如分支管理、合并、提交、…

NTRU 加密方案

参考文献&#xff1a; [Rivest97] Rivest R L. All-or-nothing encryption and the package transform[C]//Fast Software Encryption: 4th International Workshop, FSE’97 Haifa, Israel, January 20–22 1997 Proceedings 4. Springer Berlin Heidelberg, 1997: 210-218.[…

每日一题 2558. 从数量最多的堆取走礼物(简单,heapq)

怎么这么多天都是简单题&#xff0c;不多说了 class Solution:def pickGifts(self, gifts: List[int], k: int) -> int:gifts [-gift for gift in gifts]heapify(gifts)for i in range(k):heappush(gifts, -int(sqrt(-heappop(gifts))))return -sum(gifts)

什么是响应式设计?响应式设计的基本原理是什么?如何实现

什么是响应式设计 响应式就是同一个代码可以自动适应不同设备和屏幕尺寸&#xff0c;以提供最佳的用户体验。响应式设计的目标是确保网站在不同设备上呈现内容和布局时能够自动调整&#xff0c;以适应屏幕的大小和方向。这意味着网站可以在台式电脑、平板电脑、手机和其他各种…

多线程---线程安全问题及解决

文章目录 一个线程不安全的案例造成线程不安全的原因抢占式执行多个线程修改同一个变量修改操作不是原子的内存可见性问题指令重排序问题 如何让线程变得安全&#xff1f;加锁synchronized volatile 一个线程不安全的案例 题目&#xff1a;有较短时间让变量count从0加到10_000…

行业追踪,2023-10-26

自动复盘 2023-10-26 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

音视频开发常见问题(五):视频黑屏

摘要 本文介绍了视频黑屏的可能原因和解决方案。主要原因包括用户主动关闭视频、网络问题和渲染问题。解决方案包括优化网络稳定性、确保视频渲染视图设置正确、提供清晰的提示、实时监测网络质量、使用详细的日志系统、开启视频预览功能、使用视频流回调、处理编解码问题、处…

Reactor反应器模式

文章目录 一、单线程Reactor反应器模式二、多线程Reactor反应器模式 在Java的OIO编程中&#xff0c;最初和最原始的网络服务器程序使用一个while循环&#xff0c;不断地监听端口是否有新的连接&#xff0c;如果有就调用一个处理函数来处理。这种方法最大的问题就是如果前一个网…

分享一波操作系统、谢希仁版本计算机网络学习笔记【思维导图】

操作系统复习笔记 - 幕布第一章引论第二章处理器管理进程同步与通信https://www.mubu.com/doc/58qrnf20ndg 大纲 - 幕布物理层数据链路层网络层https://www.mubu.com/doc/1eo9_8TyUdg计算机网络-语雀https://www.yuque.com/yuqueyonghu6nc56e/dgg1dl/wx34gx72xpgmt598?singleD…

HackTheBox-Starting Point--Tier 1---Crocodile

文章目录 一 题目二 实验过程 一 题目 Tags Web、Network、Custom Applications、Protocols、Apache、FTP、Reconnaissance、Web Site Structure Discovery、Clear Text Credentials、Anonymous/Guest Access译文&#xff1a;Web、网络、定制应用程序、协议、Apache、FTP、侦…

Python的random随机模块相关学习记录

random是有关随机功能的一个内置模块 import random# 获取0-1之间的随机小数 print(random.random()) # 0.6224750165089413 # 获取0-1之间的随机小数# a-----b之间的随机小数 a 0 b 10 print(random.uniform(a, b)) # 1.25491670861257# 两边的值都包含在内&#xff0c;获…

html和css中图片加载与渲染的规则是什么?

浏览器渲染web页面的过程 解析html&#xff0c;构成dom树 2.加载css&#xff0c;构成样式规则树 3.加载js&#xff0c;解析js代码 4.dom树和样式树进行匹配&#xff0c;构成渲染树 5.计算元素位置进行页面布局 5.绘制页面&#xff0c;呈现到浏览器中 图片加载和渲染的过程 1.解…

java后端请求过滤options方式,亲测有效

前端每次发出post 请求时&#xff0c;浏览器会默认请求2次&#xff0c;一次是options类型&#xff0c;一次是真实的请求&#xff0c;为了避免这种情况发生&#xff0c;需在后端过滤器中拦截下options请求&#xff0c;代码如下&#xff1a; import java.io.IOException; import …

华为eNSP配置专题-策略路由的配置

文章目录 华为eNSP配置专题-策略路由的配置0、概要介绍1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、终端构成和连接2.2、终端的基本配置 3、配置接入交换机上的VLAN4、配置核心交换机为网关和DHCP服务器5、配置核心交换机和出口路由器互通6、配置PC和出口路由器…