QT开发应用程序的欢迎界面
主界面启动太慢,通常要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开发应用程序的欢迎界面的更多相关文章
- 使用 Eclipse C/C++ Development Toolkit 开发应用程序
使用 Eclipse C/C++ Development Toolkit 开发应用程序 (转) 来自http://blog.csdn.net/favory/article/details/189080 ...
- Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法
Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法 最近由于老师要求要在Ubuntu下QT上进程多线程服务器的开发,虽然只是单纯的调用qt的network模块,但是为了避免麻烦,我 ...
- 让你的 Qt 桌面程序看上去更加 native(一共六篇)
<让你的 Qt 桌面程序看上去更加 native>是一个系列文章.在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native.这里,我假设你已经清楚如何使用 Qt 编 ...
- Qt应用程序的发布
1 Windows平台上的应用程序发布 Windows发布工具 windeployqt.exe是Qt自带的Windows平台发布工具.windeployqt.exe文件在Qt的bin目录下,Qt的每一 ...
- C语言 C++1X STL QT免费视频课程 QT5界面开发美化 式样表 QML
C/C++/QT界面开发界面美化视频课程系列 课程1 C语言 C++1X STL QT免费视频课程 QT5界面开发美化 式样表 QML 返回顶部 课程1 C语言 C++1X STL QT免费视 ...
- Qt应用程序图标设置
Qt应用程序图标设置 本文仅仅适用于windows下,linux等不适用. 下面说的图标,指的是程序文件的图标,而不是托盘图标或者说运行时任务栏的图标(任务栏和程序窗口的图标在windows/linu ...
- 报表控件NCReport教程:集成NCReport到Qt应用程序中
NCReport是一款轻量级.快速.多平台.简单易用的基于Qt toolkit的C++编写的报表解决方案,目前主要包括报表渲染库和报表设计器GUI应用程序. 但是好多使用NCReport控件的朋友都不 ...
- QT添加程序图标及窗口图标
程序图标 材料准备 图标文件:*.ico文件,存放在源文件同一目录下,如"myapp.ico" 写入图标 向*.pro文件中,独立一行写入"RC_ICONS = *.ic ...
- Android小项目之十一 应用程序的主界面
------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...
随机推荐
- TP5.0 excel 导入导出
引第三方的phpexcel类库放到 ThinkPHP\Library\Vendor\demo下,自己建的文件夹demo 再将Excel.class放到ThinkPHP\Library\Org\clas ...
- YUM常用命令介绍
http://www.cnblogs.com/lostyue/archive/2012/05/06/2485653.html 1.列出所有可更新的软件清单 命令:yum check-update 2. ...
- 5.04 toArray()有一个问题须要解决一下
把查询数据转为数组输出,这个toArray()方法是把对像转为数组输出,本身是没啥 问题.但是里面好像少写了一句判断:应先判断这个对像是否为空!如果为空则不转换直接输出空就行了吗,否则一个空值去转成数 ...
- jquery自定义进度条与h5原生进度条
介绍一款自定义的进度条 <div class="box-nine"> <div class="progress"> <!--一 ...
- Codeforces 899 F. Letters Removing (二分、树状数组)
题目链接:Letters Removing 题意: 给你一个长度为n的字符串,给出m次操作.每次操作给出一个l,r和一个字符c,要求删除字符串l到r之间所有的c. 题解: 看样例可以看出,这题最大的难 ...
- jQuery --- 实现 checkbox 样式的单选框
早就想写点博客了 一直懒着动 最近发现一些写过的东西都不记得了,下决心把自己平时遇到的问题.得到的经验记录下来,希望能大家一点帮助 这是之前写的一个模态框 要求单选 但是 要求radio的默认样式 ...
- SQLServer分页查询模板
SELECT TOP 10 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM ERPTelFile ) A WHE ...
- python2.7.5 安装pip 良心推荐,超级简单.
1 先安装setuptools 下载地址:https://pypi.python.org/pypi/setuptools#downloads 将下载后的tar文件解压,用CMD模式进入到解压后的文件所 ...
- 函数式编程--为什么会出现lambda表达式?
java一直处在发张和演化的过程中,其中有2个版本从根本上改变了代码的编写方式.第一个就是JDK5之后增加的泛型,还有一个就是现在介绍的函数式编程,lambda表达式. lambda表达式是java8 ...
- Linux中的shell到底是什么?
(曾经有一段充足的时间放在我面前,可以学linux,而我没有珍惜,等我失去的时候我才后悔莫及,人世间最痛苦的事莫过于此.) 最近,要将项目代码部署到linux环境下运行,但是对linux毫无基础,之前 ...