QT开发应用程序的欢迎界面实例
发布时间 - 2026-01-11 02:53:02 点击率:次主界面启动太慢,通常要10秒以上,所以想加个欢迎界面,等程序加载好再显示主界面。

主界面(类名为MainWindow)启动慢的原因是构造函数需要执行大量初始化的工作。
创建了Welcome类作为欢迎界面,开始的思路是,在main函数中先创建Welcome类的对象,然后show(),对于主界面,在构造函数将要返回时调用自己的show()方法,并且调用welcome的close()。但是欢迎界面总是只出现边框,不显示内容,并且窗体的背景也是虚的。
原因分析:
在QT中,窗体的各种事件的分发是由QApplication来完成的,在main函数中,最后一行代码是调用QApplication对象的exec()方法,这个方法执行后,整个应用程序的事件才能被分发处理,但是在main函数中,创建MainWindow实例的时候,总是会等待MainWindow的构造函数执行完,才会执行到QApplication对象的exec()方法,所以在此之前欢迎界面的事件是不被响应的,paintEvent()函数不会得到执行,所以也就不会正常显示出来了,当MainWindow的构造函数执行完成,QApplication对象能够处理事件分发时,也不需要欢迎界面显示了,可以直接显示主界面了。
只能想办法让MainWindow的构造函数立即返回,初始化的工作留在后续处理。但是谁来调用初始化的工作代码呢,welcome类的构造函数也不能去调用它,否则一样会很慢才能显示出来。我的办法是使用QTimer定时很短一段时间,自动触发初始化代码的执行,这样不占用构造函数的执行时间,让QApplication能够尽快工作起来。
一下是简略代码:
main.cpp
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
//...其他代码
WelcomeWindow *welcome=new WelcomeWindow();
MainWindow w(welcome);
return app.exec();
}
MainWindow的构造函数
this->welcome=welcome;
if(welcome != 0){
welcome->show();
timerInit=new QTimer();
timerInit->setInterval(100);
timerInit->setSingleShot(true);//设置Timer只触发一次
timerInit->start();
connect(timerInit, SIGNAL(timeout()), SLOT(init()));
}else{
init();
}
MainWindow的init()函数(将原构造函数的初始化代码放到init()里了)
if(welcome!=0){
welcome->close();
delete welcome;
this->show();
}
以上这篇QT开发应用程序的欢迎界面实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# 应用程序界面
# Qt图形图像开发之曲线图模块QCustomplot库生成静态、动态曲线详细教程图解
# Qt图形图像开发之高性能曲线图模块QCustomplot库详细使用方法与实例(支持动、静曲线图)
# Qt学习教程之对话框消失动画效果
# Qt学习教程之表格控件蚂蚁线详解
# Qt 使用Poppler实现pdf阅读器的示例代码
# Qt实现保存、浏览、预览、打印功能的示例代码
# QT网络编程Tcp下C/S架构的即时通信实例
# 在QT5中实现求两个输入值的和并输出(实例)
# QT网络编程UDP下C/S架构广播通信(实例讲解)
# 浅谈Qt中使用CEF的几个要点(Windows下)
# 深入理解Qt中各种消息框对话框的使用
# Qt实现FTP的上传和下载的实例代码
# Qt如何设置窗口屏幕居中显示以及设置大小
# Qt图形图像开发之曲线图表库QChart编译安装详细方法与使用实例
# 给大家
# 应用程序
# 自己的
# 也不
# 也就
# 在此
# 是由
# 才会
# 执行时间
# 希望能
# 可以直接
# 这篇
# 不被
# 想办法
# 谁来
# 来完成
# 里了
# 很慢
# 很短
# 小编
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
Laravel如何处理CORS跨域请求?(配置示例)
Laravel如何使用模型观察者?(Observer代码示例)
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
微信小程序 input输入框控件详解及实例(多种示例)
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
如何确保西部建站助手FTP传输的安全性?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
如何在IIS中配置站点IP、端口及主机头?
用v-html解决Vue.js渲染中html标签不被解析的问题
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
制作旅游网站html,怎样注册旅游网站?
Python数据仓库与ETL构建实战_Airflow调度流程详解
详解Oracle修改字段类型方法总结
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
如何用搬瓦工VPS快速搭建个人网站?
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
如何快速重置建站主机并恢复默认配置?
什么是javascript作用域_全局和局部作用域有什么区别?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
Laravel如何实现API速率限制?(Rate Limiting教程)
如何批量查询域名的建站时间记录?
EditPlus中的正则表达式实战(6)
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
JavaScript Ajax实现异步通信
浅析上传头像示例及其注意事项
如何用AWS免费套餐快速搭建高效网站?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
详解Android中Activity的四大启动模式实验简述
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel如何实现一对一模型关联?(Eloquent示例)
如何快速配置高效服务器建站软件?
Laravel如何集成Inertia.js与Vue/React?(安装配置)
php打包exe后无法访问网络共享_共享权限设置方法【教程】
C#如何调用原生C++ COM对象详解
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
手机软键盘弹出时影响布局的解决方法
Android自定义listview布局实现上拉加载下拉刷新功能
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
专业商城网站制作公司有哪些,pi商城官网是哪个?
js代码实现下拉菜单【推荐】
Laravel如何升级到最新版本?(升级指南和步骤)

