Qt带进度条的启动界面(继承QSplashScreen,然后使用定时器)

摘要:
QSplashScreen(QSplash屏幕)>CMySplashScreen(QPixmap&CMySplash屏幕(QPixmap&font;文本对齐;center://Set进度条ProgressBar的样式-&gt//设置当前进度栏ProgressBar->i&lt

        通过继承QSplashScreen类,得到CMySplashScreen类,然后在CMySplashScreen中定义QProgressBar变量,该变量以CMySplashScreen为父类,这样就实现了带进度条的启动界面。

        进度条加入后,需要控制进度条的值,为了让进度条看起来更逼真,可以通过生成随机数的方式,把随机数当做进度条的值。此时,生成的随机数必须是从小到大排列的,要不然进度条就不会从开端一步步走到终点,而是会出现走到一半后又回到开端等反常现象。如何生成随机数可参考http://blog.csdn.net/caoshangpa/article/details/51036267

        CMySplashScreen类的实现如下所示。

[cpp] view plain copy
 
  1. #ifndef CMYSPLASHSCREEN_H  
  2. #define CMYSPLASHSCREEN_H  
  3.   
  4. #include <QSplashScreen>  
  5. #include <QPixmap>  
  6. #include <QProgressBar>  
  7. #include <QList>  
  8. #include <QtGlobal>  
  9.   
  10. class CMySplashScreen: public QSplashScreen  
  11. {  
  12.      Q_OBJECT  
  13.   
  14. public:  
  15.      CMySplashScreen(QPixmap& pixmap,int time);  
  16.      ~CMySplashScreen();  
  17.   
  18. private:  
  19.      //进度条  
  20.      QProgressBar *ProgressBar;  
  21.      //随机数列表  
  22.      QList<int> numbersList;  
  23.      //启动界面停留的时间  
  24.      int elapseTime;  
  25.   
  26. private:  
  27.      void setProgress();  
  28.      void generateAscendRandomNumber();  
  29.   
  30. private slots:      
  31.      void slotUpdateProgress();  
  32. };  
  33.   
  34. #endif // CMYSPLASHSCREEN_H  
[cpp] view plain copy
 
  1. #include "cmysplashscreen.h"  
  2. #include <QTime>  
  3. #include <QTimer>  
  4. CMySplashScreen::CMySplashScreen(QPixmap& pixmap,int time) :  
  5.     QSplashScreen(pixmap),  
  6.     elapseTime(time)  
  7. {  
  8.     ProgressBar = new QProgressBar(this);  
  9.     //设置进度条的位置  
  10.     ProgressBar->setGeometry(0,pixmap.height()-50,pixmap.width(),30);  
  11.     //设置进度条的样式  
  12.     ProgressBar->setStyleSheet("QProgressBar {color:black;font:30px;text-align:center; }QProgressBar::chunk {background-color: rgb(202, 165, 14);}");  
  13.     //设置进度条的样式  
  14.     ProgressBar->setRange(0, 100);  
  15.     //设置进度条的当前进度  
  16.     ProgressBar->setValue(0);  
  17.   
  18.     generateAscendRandomNumber();  
  19.     setProgress();  
  20. }  
  21.   
  22. CMySplashScreen::~CMySplashScreen()  
  23. {  
  24.   
  25. }  
  26.   
  27. void CMySplashScreen::setProgress()  
  28. {  
  29.     int tempTime=elapseTime/100;  
  30.     for(int i=0;i<100;i++)  
  31.     {  
  32.        QTimer::singleShot(i*tempTime, this, SLOT(slotUpdateProgress()));  
  33.     }  
  34.     QTimer::singleShot(elapseTime, this, SLOT(close()));  
  35. }  
  36.   
  37. void CMySplashScreen::slotUpdateProgress()  
  38. {  
  39.     static int num=0;  
  40.     ProgressBar->setValue(numbersList[num]);  
  41.     num++;  
  42. }  
  43.   
  44. void CMySplashScreen::generateAscendRandomNumber()  
  45. {  
  46.     int i;  
  47.     qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));  
  48.     //生成100个大小在[0,100]之间的随机数  
  49.     for(i=0;i<100;i++)  
  50.     {  
  51.         numbersList.append(qrand()%101);  
  52.     }  
  53.     //递增排序  
  54.     qSort(numbersList.begin(),numbersList.end());  
  55. }  


启动界面效果如下所示。

Qt带进度条的启动界面(继承QSplashScreen,然后使用定时器)第1张
源码链接:见http://blog.csdn.net/caoshangpa/article/details/51037427的评论

免责声明:文章转载自《Qt带进度条的启动界面(继承QSplashScreen,然后使用定时器)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇LSTM 详解责任链模式——更灵活的if else下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CSS3媒体查询总结

1、什么是媒体查询 媒体查询可以让我们根据设备显示器的特性(如视口宽度、屏幕比例、设备方向:横向或纵向)为其设定CSS样式,媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成。媒体查询中可用于检测的媒体特性有 width 、 height 和 color (等)。使用媒体查询,可以在不改变页面内容的情况下,为特定的一些输出设备定制显示效果。 2、为...

解决配置vim中文乱码的问题

解决linux下vim乱码的情况:(修改vimrc的内容) 全局的情况下:即所有用户都能用这个配置 文件地址:/etc/vimrc 在文件中添加: set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 set termencoding=utf-8 set encoding=utf-8 如果只修改个...

Qt 无边框窗体改变大小 完美实现(全部自己实现)

近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅。 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo,写了一个小时,问题太多了,扔一边先不管了。 今天需要改进UI界面,没办法了,重新整理了下思路,没想到做出来了。下面来分享下实现的过程,也许是菜鸟专栏,高手勿喷...

TextView加边框,自定义,上下左右四条线 颜色,想用哪个用哪个

1.这是一个自定义的TextView ,看吧,底下就是代码,应该都可以看懂,这里就不多说了 package com.example.admin.myutilsborder;import android.content.Context;import android.content.res.TypedArray;import android.graphics....

tinyhttpd源码分析

  我们经常使用网页,作为开发人员我们也部署过httpd服务器,比如开源的apache,也开发过httpd后台服务,比如fastcgi程序,不过对于httpd服务器内部的运行机制,却不是非常了解,前几天看见tinyhttpd,只有短短500行左右的代码,就实现了一个简单的httpd服务器的基本功能,这种tiny程序,其实对于我们了解基本核心有一定的帮助,可...

使用jxls技术导入Excel模版数据(转自其他博客)

第一步:先确定好Excel导入的格式以及各表格字段值的含义 第二步:定义好解析的XML--videoConfig.xml <?xml version="1.0" encoding="UTF-8"?> <workbook> <worksheet name="Sheet1"> <sectio...