QT程序启动前的预加载与QT程序的启动动画(C++)

一、目标任务

        在Qt的程序启动前需要做一些预加载操作,这个过程可能持续十几秒,这会让QT程序卡住,所以希望在此期间显示启动动画;

二、具体实现

1、预加载内容的处理

此处需要将预先加载的程序内容放在单独一个线程中(使用detach()执行),通过全局变量作为信号来获取加载完成进度,示例如下:

//以下内容建议新建一个项目实现,然后在原先的QT项目中调用该项目的函数
//补充自己需要的头文件及其它内容#include <thread>int run_flag = 99;//全局变量,用于传输信号//需要加载的程序代码Load_Progarm()
void Load_Program()
{//输入你的程序//程序运行结束改变信号if(true){run_flag = 1;}else{run_flag = 0;}}void Start_Program()
{//创建一个线程运行上述程序std::thread Start_Thread(Load_Program);//使用detach启动线程Start_Thread.detach();
}//获取信号
int get_RunFlag()
{return run_flag;
}

2、在QT程序启动前开启动画并判断预加载程序是否完成

在QT项目的main函数里实现:

#include <QApplication>
#include <QMessageBox>
#include <QSplashScreen>
#include <QPixmap>
//补充其它用到的头文件、例如预加载程序的调用头文件int main(int argc, char *argv[])
{QApplication a(argc,argv);int res = 99;//用于判断预先加载程序的返回值//开场动画QSplashScreen* splash = new QSplashScreen;QPixmap pixmap("FileImg.png");//动画图片所在路径splash->setPixmap(pixmap);//设置样式,将背景设置为透明(前提是使用.gif或者.png图像)splash->setStyleSheet("backgroud-color: transparent;");//使用QSplashScreen创建的动画显示时,默认鼠标点击会消失,此处禁用交互splash->setDisabled(true);//显示splash->show();//设置该动画窗口置顶于所有窗口的最上层显示::SetWindowPos(HWND(splash->winId()),HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE| SWP_SHOWWINDOW);//执行预先加载程序Start_Program();//该函数参考上述预加载程序示例//通过返回信号判断预加载程序是否结束while(1){QCoreApplication::processEvents();//释放事件,防止卡死Sleep(1);//如果是动态图,则此处为每一帧的间隔res = get_RunFlag();//该函数参考上述预加载程序示例,用于返回当前状态if(res != 99){break;}}//取消动画窗口置顶::SetWindowPos(HWND(splash->winId()),HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE| SWP_SHOWWINDOW);//判断预加载程序返回内容if(res==1){//加载成功,启动QT程序Your_Project w;w.show();//启动前关闭动画splash->finish(&w);return a.exec();}else{//返回0则预加载程序失败}}

上述代码由笔者在网页端编辑,如有错误请及时纠正,感谢。

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

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

相关文章

外卖 点金推广实战课程,2024外卖 点金推广全流程(7节课+资料)

课程内容&#xff1a; 外卖点金推广实操课程 资料 01 1-了解外卖.mp4 02 第一节:点金推广的说明.mp4 03 第二节:如何降低点金推广的成本,mp4 04 第三节:如何计算点金推广的流速,mp4 05 第四节:如何提升点金的精准度,mp4 06 第五节:点金推广实操,mp4 07 点金推广高级教程…

volatile详解、原理

文章目录 一、Volatile的定义和作用1.1 Volatile简介1.2 Volatile作用 二、并发编程中的三个问题&#xff1a;可见性、原子性、有序性二、Java内存模型&#xff08;JMM&#xff09;三、volatile变量的特性3.1 线程可见性3.2 禁止重排序禁止重排序原理禁止重排序举例 3.3 volati…

vue3 第二十八节 (vue3 事件循环之JS事件循环)

1、什么是事件循环 事件循环就是消息队列&#xff0c;是浏览器渲染主线程的工作方式&#xff1b; 过去将消息队列&#xff0c;简单的分为宏任务 和微任务 两种队列&#xff0c;而对于现在复杂多变的浏览器环境&#xff0c;显然这种处理方式已经不能满足使用&#xff0c;取而代…

AI试衣IDM-VTON,Windows11本地安装配置记录!

昨天我们已经介绍过IDM-VTON这个开源项目了。 通过这个软件可以轻松实现一键换衣服。 昨天&#xff0c;简单演示了一下在线使用。 今天&#xff0c;来演示如何安装到本地电脑上&#xff01; 本地配置会有一定的专业性&#xff0c;懂的人可以参考下。 不懂得直接拉到最后&am…

SSRF(服务器端请求伪造)的学习以及相关例题(上)

目录 一、SSRF的介绍 二、漏洞产生的原因 三、利用SSRF可以实现的效果&#xff08;攻击方式&#xff09; 四、SSRF的利用 五、SSRF中的函数 file_get_content() 、fsockopen() 、curl_exec() 1.file_get_content()&#xff1a; 2.fsockopen(): 3.curl_exec()&#xff1…

AI大模型客服机器人VS传统客服机器人

摘要&#xff1a;AI大模型客服机器人相较于传统客服机器人&#xff0c;具有更准确的语义理解、丰富的知识库、更自然的交互体验、个性化服务、自主学习和数据分析能力。传统客服机器人受限于规则和固定关键词&#xff0c;难以处理复杂查询和提供个性化服务。 1. 更准确的语义理…

正则表达式(python实例)

正则表达式&#xff08;python实例&#xff09; 一、简介 正则表达式&#xff08;Regular Expressions&#xff0c;简称 Regex&#xff09;是一种用来描述文本模式的工具&#xff0c;它通过一系列字符和特殊字符组合成的表达式&#xff0c;用于在文本中进行模式匹配和搜索。这…

【索引】索引基础

索引 在关系型数据库中&#xff0c;索引是一种用来帮助快速检索目标数据的存储结构。 索引的创建 MySQL可以通过CREATE、ALTER、DDL三种方式创建一个索引。 1、使用CREATE语句创建 CREATE INDEX indexName ON tableName (columnName(length) [ASC|DESC]);2、使用ALTER语句…

基于GD32的简易数字示波器(5)- 软件_控制LED

这期记录的是项目实战&#xff0c;做一个简易的数字示波器。 教程来源于嘉立创&#xff0c;帖子主要做学习记录&#xff0c;方便以后查看。 本期主要介绍GPIO口的输入输出模式&#xff0c;使用其中的输出模式驱动LED。详细教程可观看下方链接。 2.2 LED控制实验 语雀 1、LE…

SaaS(软件即服务)详解

SaaS&#xff08;软件即服务&#xff09;详解 引言 SaaS&#xff0c;即软件即服务&#xff0c;是一种通过互联网提供软件和服务的模式。与传统的软件购买和安装方式不同&#xff0c;SaaS 允许用户通过订阅的方式使用软件&#xff0c;通常是基于使用量或订阅期限进行计费。Saa…

传神论文中心|第8期人工智能领域论文推荐

在人工智能领域的快速发展中&#xff0c;我们不断看到令人振奋的技术进步和创新。近期&#xff0c;开放传神&#xff08;OpenCSG&#xff09;社区发现了一些值得关注的成就。多令牌预测方法的出现以及各类全新的多模态模型的发展令人耳目一新。传神社区本周也为对AI和大模型感兴…

IP SSL怎么签发使用

IP证书的签发首先是需要有一个可供绑定的IP地址&#xff0c;作为常用数字证书之一&#xff0c;IP证书也因为其广泛的应用范围而深得用户的青睐和喜欢。 部署IP证书后&#xff0c;可以实现该IP地址的https访问&#xff0c;过程和域名证书相差不多。 IP证书和域名证书的区别 很…

浅谈java,python,c++的差异

Java&#xff0c;Python和C是三种常见的编程语言&#xff0c;它们在很多方面有着不同的特点。以下是它们的一些主要异同点&#xff1a; 宏观应用 语法和风格&#xff1a; Java&#xff1a;Java是一种静态类型语言&#xff0c;语法相对严谨&#xff0c;需要显式声明变量的类型。…

python设计模式---工厂模式

定义了一个抽象类Animal&#xff0c;并且让具体的动物类&#xff08;Dog、Cat、Duck&#xff09;继承自它&#xff0c;并实现了speak方法。然后创建了AnimalFactory工厂类&#xff0c;根据传入的参数来决定创建哪种动物的实例。 from abc import abstractmethod, ABCclass Anim…

linux进阶高级配置,你需要知道的有哪些(9)-脚本应用(四)

1、正则表达式定义 是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串 2、正则表达式组成 &#xff08;1&#xff09;普通字符 大小写字母、数字、标点符号及一些其他符号 &#xff08;2&#xff09;元字符 在正则表达式中具有特殊意义的专用字符 3、正…

05、 java 的三种注释及 javadoc 命令解析文档注释(即:java 特有注释方式)的过程

java的三种注释 1、单行注释&#xff1a;其一、代码展示&#xff1a;其二、特点&#xff1a; 2、多行注释&#xff1a;其一、代码展示&#xff1a;其二、特点&#xff1a; 3、文档注释(java特有)&#xff1a;其一、代码展示&#xff1a;其二、注释文档的使用&#xff1a;其三、…

掌握Vim:Linux系统维护的瑞士军刀 - 常用命令深度解析

在Linux的世界里&#xff0c;Vim编辑器犹如一位沉默的剑客&#xff0c;它的命令就是那锋利的剑刃&#xff0c;能够在代码的海洋中劈波斩浪。对于每一位Linux系统用户来说&#xff0c;掌握Vim的常用命令&#xff0c;就如同获得了维护系统的瑞士军刀。今天&#xff0c;让我们一起…

Java中,throw和throws的区别是什么?

在Java中&#xff0c;throw和throws都与异常处理相关&#xff0c;但它们的作用和使用方式有所不同。 throw 抛出异常&#xff1a;throw是一个语句&#xff0c;用于在程序的特定位置手动抛出一个异常对象。局部范围内&#xff1a;throw通常用在方法体或任何代码块的内部&#…

Rumor Remove Order Strategy on Social Networks

ABSTRACT 谣言被定义为广泛传播且没有可靠来源支持的言论。现代社会&#xff0c;谣言在社交网络上广泛传播。谣言的传播给社会带来了巨大的挑战。 “假新闻”故事可能会激怒您的情绪并改变您的情绪。有些谣言甚至会造成社会恐慌和经济损失。因此&#xff0c;谣言的影响可能是深…

Flutter 中的 Autocomplete 小部件:全面指南

Flutter 中的 Autocomplete 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;Autocomplete 是一个文本输入辅助小部件&#xff0c;它可以根据用户输入的内容提供自动完成建议。这在创建搜索栏、填写表单或其他需要快速输入的场景中非常有用。虽然 Flutter 的基础库中没有…