Qt带进度条的启动界面(继承QSplashScreen,然后使用定时器)
通过继承QSplashScreen类,得到CMySplashScreen类,然后在CMySplashScreen中定义QProgressBar变量,该变量以CMySplashScreen为父类,这样就实现了带进度条的启动界面。
进度条加入后,需要控制进度条的值,为了让进度条看起来更逼真,可以通过生成随机数的方式,把随机数当做进度条的值。此时,生成的随机数必须是从小到大排列的,要不然进度条就不会从开端一步步走到终点,而是会出现走到一半后又回到开端等反常现象。如何生成随机数可参考http://blog.csdn.net/caoshangpa/article/details/51036267
CMySplashScreen类的实现如下所示。
- #ifndef CMYSPLASHSCREEN_H
- #define CMYSPLASHSCREEN_H
- #include <QSplashScreen>
- #include <QPixmap>
- #include <QProgressBar>
- #include <QList>
- #include <QtGlobal>
- class CMySplashScreen: public QSplashScreen
- {
- Q_OBJECT
- public:
- CMySplashScreen(QPixmap& pixmap,int time);
- ~CMySplashScreen();
- private:
- //进度条
- QProgressBar *ProgressBar;
- //随机数列表
- QList<int> numbersList;
- //启动界面停留的时间
- int elapseTime;
- private:
- void setProgress();
- void generateAscendRandomNumber();
- private slots:
- void slotUpdateProgress();
- };
- #endif // CMYSPLASHSCREEN_H
- #include "cmysplashscreen.h"
- #include <QTime>
- #include <QTimer>
- CMySplashScreen::CMySplashScreen(QPixmap& pixmap,int time) :
- QSplashScreen(pixmap),
- elapseTime(time)
- {
- ProgressBar = new QProgressBar(this);
- //设置进度条的位置
- ProgressBar->setGeometry(0,pixmap.height()-50,pixmap.width(),30);
- //设置进度条的样式
- ProgressBar->setStyleSheet("QProgressBar {color:black;font:30px;text-align:center; }QProgressBar::chunk {background-color: rgb(202, 165, 14);}");
- //设置进度条的样式
- ProgressBar->setRange(0, 100);
- //设置进度条的当前进度
- ProgressBar->setValue(0);
- generateAscendRandomNumber();
- setProgress();
- }
- CMySplashScreen::~CMySplashScreen()
- {
- }
- void CMySplashScreen::setProgress()
- {
- int tempTime=elapseTime/100;
- for(int i=0;i<100;i++)
- {
- QTimer::singleShot(i*tempTime, this, SLOT(slotUpdateProgress()));
- }
- QTimer::singleShot(elapseTime, this, SLOT(close()));
- }
- void CMySplashScreen::slotUpdateProgress()
- {
- static int num=0;
- ProgressBar->setValue(numbersList[num]);
- num++;
- }
- void CMySplashScreen::generateAscendRandomNumber()
- {
- int i;
- qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
- //生成100个大小在[0,100]之间的随机数
- for(i=0;i<100;i++)
- {
- numbersList.append(qrand()%101);
- }
- //递增排序
- qSort(numbersList.begin(),numbersList.end());
- }
启动界面效果如下所示。
源码链接:见http://blog.csdn.net/caoshangpa/article/details/51037427的评论
Qt带进度条的启动界面(继承QSplashScreen,然后使用定时器)的更多相关文章
- Android带进度条的文件上传,使用AsyncTask异步任务
最近项目中要做一个带进度条的上传文件的功能,学习了AsyncTask,使用起来比较方便,将几个方法实现就行,另外做了一个很简单的demo,希望能对大家有帮助,在程序中设好文件路径和服务器IP即可. A ...
- Android更新带进度条的通知栏
在网上查询了下.Android版本号更新通知栏带进度条,醉了,基本都是复制过来.有的代码不全,连源代码下载都没有.有下载也须要积分,还不能用,真黑心啊!!之前自己也写过自己定义通知栏Notificat ...
- Asp.Net上传大文件带进度条swfupload
Asp.Net基于swfupload上传大文件带进度条百分比显示,漂亮大气上档次,大文件无压力,先看效果 一.上传效果图 1.上传前界面:图片不喜欢可以自己换 2.上传中界面:百分比显示 3.上传后返 ...
- web app升级—带进度条的App自动更新
带进度条的App自动更新,效果如下图所示: 技术:vue.vant-ui.5+ 封装独立组件AppProgress.vue: <template> <div> <va ...
- 025 Android 带进度条的对话框(ProgressDialog)
1.ProgressDialog介绍 ProgressDialog可以在当前界面弹出一个置顶于所有界面元素的对话框,同样具有屏蔽其他控件的交互能力,用于提示用户当前操作正在运行,让用户等待: 2.应用 ...
- linux 复 带进度条
rsync命令 #rsync -av --progress /mnt/yidong2/full20100526.tar.gz /mnt/yidong1/ 可以实现本机带进度条提示拷贝,可以实现不同机器 ...
- java进行文件上传,带进度条
网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...
- 赞!带进度条的 jQuery 文件拖放上传插件
jQuery File Uploader 是一个 jQuery 文件拖放上传插件,包括 Ajax 上传和进度条效果.作者编写这个插件的想法是要保持它非常简单,不像其他的插件,很多的标记,并提供一些 H ...
- Extjs 使用fileupload插件上传文件 带进度条显示
一.首先我们看看官方给出的插件的解释: 一个文件上传表单项具有自定义的样式,并且可以控制按钮的文本和 像文本表单的空文本类似的其他特性. 它使用一个隐藏的文件输入元素,并在用户选择文件后 在form提 ...
随机推荐
- Linux cat和EOF的使用
在某些场合,可能我们需要在脚本中生成一个临时文件,然后把该文件作为最终文件放入目录中.(可参考ntop.spec文件)这样有几个好处,其中之一就是临时文件不是唯一的,可以通过变量赋值,也可根据不同的判 ...
- 转:linux执行shell脚本的方式及一些区别
假设shell脚本文件为hello.sh放在/root目录下.下面介绍几种在终端执行shell脚本的方法: [root@localhost home]# cd /root/ [root@localho ...
- 【转】Android ListView长按事件触发点击事件
原文网址:http://blog.csdn.net/twlkyao/article/details/17301609 算法在实现ListView的onItemLongClickListener的时候, ...
- linux下 tags相关
在vim中配置好了YouCompleteMe插件,发现把光标移动到函数名下再按ctrl+],并不能跳转到该函数的定义处.解决办法: 1.先查看有没有安装ctags,运行ctags –version查看 ...
- 编程:C#调用Python模块
当下,C#与Python都是比较热门的计算机编程语言,他们各有优缺点,如果能让他们互相配合工作,那是多么美好的事情,今天我来讲解一下如何利用C#来调用Python. 如果让C#支持调用Python模块 ...
- db2的select语句在db2 client上执行正确,JDBC连接数据库时报错
db2的select语句在db2 client上执行正确,JDBC连接数据库时报错. sql语句是:select ...from QUALIFIER.tableName fetch first 21 ...
- 将Maven项目转换成Eclipse支持的Java项目
当我们通过模版(比如最简单的maven-archetype-quikstart插件)生成了一个maven的项目结构时,如何将它转换成eclipse支持的java project呢? 1. 定位到mav ...
- [iOS]数据库第三方框架FMDB详细讲解
[iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封 ...
- hdu1978How many ways (记忆化搜索+DFS)
Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起始点所标 ...
- JMeter Building a Database Test Plan
Building a Database Test Plan In this section, you will learn how to create a basic Test Planto test ...