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

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

CMySplashScreen类的实现如下所示。

  1. #ifndef CMYSPLASHSCREEN_H
  2. #define CMYSPLASHSCREEN_H
  3. #include <QSplashScreen>
  4. #include <QPixmap>
  5. #include <QProgressBar>
  6. #include <QList>
  7. #include <QtGlobal>
  8. class CMySplashScreen: public QSplashScreen
  9. {
  10. Q_OBJECT
  11. public:
  12. CMySplashScreen(QPixmap& pixmap,int time);
  13. ~CMySplashScreen();
  14. private:
  15. //进度条
  16. QProgressBar *ProgressBar;
  17. //随机数列表
  18. QList<int> numbersList;
  19. //启动界面停留的时间
  20. int elapseTime;
  21. private:
  22. void setProgress();
  23. void generateAscendRandomNumber();
  24. private slots:
  25. void slotUpdateProgress();
  26. };
  27. #endif // CMYSPLASHSCREEN_H
  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. generateAscendRandomNumber();
  18. setProgress();
  19. }
  20. CMySplashScreen::~CMySplashScreen()
  21. {
  22. }
  23. void CMySplashScreen::setProgress()
  24. {
  25. int tempTime=elapseTime/100;
  26. for(int i=0;i<100;i++)
  27. {
  28. QTimer::singleShot(i*tempTime, this, SLOT(slotUpdateProgress()));
  29. }
  30. QTimer::singleShot(elapseTime, this, SLOT(close()));
  31. }
  32. void CMySplashScreen::slotUpdateProgress()
  33. {
  34. static int num=0;
  35. ProgressBar->setValue(numbersList[num]);
  36. num++;
  37. }
  38. void CMySplashScreen::generateAscendRandomNumber()
  39. {
  40. int i;
  41. qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
  42. //生成100个大小在[0,100]之间的随机数
  43. for(i=0;i<100;i++)
  44. {
  45. numbersList.append(qrand()%101);
  46. }
  47. //递增排序
  48. qSort(numbersList.begin(),numbersList.end());
  49. }

启动界面效果如下所示。


源码链接:见http://blog.csdn.net/caoshangpa/article/details/51037427的评论

Qt带进度条的启动界面(继承QSplashScreen,然后使用定时器)的更多相关文章

  1. Android带进度条的文件上传,使用AsyncTask异步任务

    最近项目中要做一个带进度条的上传文件的功能,学习了AsyncTask,使用起来比较方便,将几个方法实现就行,另外做了一个很简单的demo,希望能对大家有帮助,在程序中设好文件路径和服务器IP即可. A ...

  2. Android更新带进度条的通知栏

    在网上查询了下.Android版本号更新通知栏带进度条,醉了,基本都是复制过来.有的代码不全,连源代码下载都没有.有下载也须要积分,还不能用,真黑心啊!!之前自己也写过自己定义通知栏Notificat ...

  3. Asp.Net上传大文件带进度条swfupload

    Asp.Net基于swfupload上传大文件带进度条百分比显示,漂亮大气上档次,大文件无压力,先看效果 一.上传效果图 1.上传前界面:图片不喜欢可以自己换 2.上传中界面:百分比显示 3.上传后返 ...

  4. web app升级—带进度条的App自动更新

    带进度条的App自动更新,效果如下图所示:   技术:vue.vant-ui.5+ 封装独立组件AppProgress.vue: <template> <div> <va ...

  5. 025 Android 带进度条的对话框(ProgressDialog)

    1.ProgressDialog介绍 ProgressDialog可以在当前界面弹出一个置顶于所有界面元素的对话框,同样具有屏蔽其他控件的交互能力,用于提示用户当前操作正在运行,让用户等待: 2.应用 ...

  6. linux 复 带进度条

    rsync命令 #rsync -av --progress /mnt/yidong2/full20100526.tar.gz /mnt/yidong1/ 可以实现本机带进度条提示拷贝,可以实现不同机器 ...

  7. java进行文件上传,带进度条

    网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...

  8. 赞!带进度条的 jQuery 文件拖放上传插件

    jQuery File Uploader 是一个 jQuery 文件拖放上传插件,包括 Ajax 上传和进度条效果.作者编写这个插件的想法是要保持它非常简单,不像其他的插件,很多的标记,并提供一些 H ...

  9. Extjs 使用fileupload插件上传文件 带进度条显示

    一.首先我们看看官方给出的插件的解释: 一个文件上传表单项具有自定义的样式,并且可以控制按钮的文本和 像文本表单的空文本类似的其他特性. 它使用一个隐藏的文件输入元素,并在用户选择文件后 在form提 ...

随机推荐

  1. 直接修改别人jar包里面的class文件 工具:jclasslib

    出于某些原因 需要把别人jar包里面的class修改一下信息 配置文件*.properties MANIFEST.MF 这些东西可以直接用记事本打开修改 然后替换掉就OK.. 在网上游荡了半天,没有找 ...

  2. Java Thread Status(转)

    public static enum Thread.State  extends Enum<Thread.State>线程状态.线程可以处于下列状态之一: 1.NEW 至今尚未启动的线程的 ...

  3. 利用php unpack读取c struct的二进制数据,struct内存对齐引起的一些问题

    c语言代码 #include <stdio.h> struct test{ int a; unsigned char b; int c; }; int main(){ FILE *fp; ...

  4. 【转】android 5.0 64bit系统加载库文件失败问题浅析

    原文网址:http://blog.csdn.net/andrewblog/article/details/43601303 最近公司的一个项目使用android 5.0 64 bit平台,相对以前版本 ...

  5. Android去除系统自带动画的两种方法

    方法一: 在startActivity()或者finish()后紧跟调用: ((Activity) mContext).overridePendingTransition(0, 0); 方法二: 在一 ...

  6. log4net 快速上手使用

    *本随笔仅限快速上手,如需深入探究,可查阅其它博友. 一.下载log4net.dll并添加引用; 二.添加配置文件 log4net.xml : <?xml version="1.0&q ...

  7. Ajax属性和函数以及 返回值之XML格式和文本格式(二)

    (一) client请求文本之json格式:接收到json格式,再有js解析(详细先eval成对象,然后.就可以) var text = this.responseText; var book = e ...

  8. STM32外部中断具体解释

      一.基本概念 ARM Coetex-M3内核共支持256个中断,当中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32眼下支持的中断共84个(16个内部+68个外部), ...

  9. C语言中static关键字的作用

    static的作用(精辟分析) 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加sta ...

  10. ios浅谈关于nil和 NIL区别及相关问题(转)

    转自:http://blog.csdn.net/guozh/article/details/8469131 个就是将引用技术减1,所谓的引用计数就是看看有多个指针指向一块内存实体,当release一次 ...