QProgressBar的使用例子
今天下午动手实践了一下QProgressBar,遇到的问题比较多,浪费了不少时间,但收获同样颇多... 程序界面如下:
1 // progressbar.h
2
3 #ifndef PROGRESSBAR_H
4 #define PROGRESSBAR_H
5 #include <QDialog>
6 class QLabel;
7 class QLineEdit;
8 class QComboBox;
9 class QPushButton;
10 class QProgressBar;
11 class Progress : public QDialog
12 {
13 Q_OBJECT
14 public:
15 Progress(QWidget *parent=0,Qt::WindowFlags f=0);
16 ~Progress();
17 private:
18 QLabel *numLabel;
19 QLineEdit *numLineEdit;
20 QLabel *typeLabel;
21 QComboBox *typeComboBox;
22 QProgressBar *progressBar;
23 QPushButton *startPushButton;
24 private slots:
25 void slotStart();
26 };
27 #endif // PROGRESSBAR_H
1 #include "progressbar.h"
2 #include <QLabel>
3 #include <QLineEdit>
4 #include <QComboBox>
5 #include <QProgressBar>
6 #include <QPushButton>
7 #include <QGridLayout>
8 #include <QProgressDialog>
9 #include <QApplication>
10 #include <QTest> //以便调用QTest::qSleep(); 实现延时功能
11
12 Progress::Progress(QWidget *parent,Qt::WindowFlags f):QDialog(parent,f)
13 {
14 QFont font("Times", 10, QFont::Bold);
15 setFont(font);
16 setWindowTitle("ProgressBar");
17 numLabel=new QLabel("File Num:");
18 numLineEdit=new QLineEdit;
19 numLineEdit->setText("10");
20 typeLabel=new QLabel("Progress Type:");
21 typeComboBox=new QComboBox;
22 typeComboBox->addItem("ProgressBar");
23 typeComboBox->addItem("ProgressDialog");
24
25 progressBar=new QProgressBar;
26 startPushButton=new QPushButton("Start");
27
28 QGridLayout *layout=new QGridLayout;
29 layout->addWidget(numLabel,0,0);
30 layout->addWidget(numLineEdit,0,1);
31 layout->addWidget(typeLabel,1,0);
32 layout->addWidget(typeComboBox,1,1);
33 layout->addWidget(progressBar,2,0,1,2);
34 layout->addWidget(startPushButton,3,1);
35 layout->setMargin(15); // 布局外边框的宽度
36 layout->setSpacing(10); //部件间的间距
37
38 setLayout(layout);
39
40 connect(startPushButton,SIGNAL(clicked()),this,SLOT(slotStart()));
41 }
42
43 Progress::~Progress(){}
44
45 void Progress::slotStart()
46 {
47 int num=numLineEdit->text().toInt();
48 if (typeComboBox->currentIndex()==0)
49 {
50 progressBar->setRange(0,num);
51 for (int i=0;i<num;i++)
52 {
53 progressBar->setValue(i+1); // 注意,这里是i+1,不是i,这样才能显示100%
54 QTest::qSleep(100);
55 }
56 }
57 else if (typeComboBox->currentIndex()==1)
58 {
59 QProgressDialog *progressDialog=new QProgressDialog(this);
60 QFont font("Times", 10, QFont::Bold);
61 progressDialog->setFont(font);
62 progressDialog->setWindowModality(Qt::WindowModal); //设置窗口模式,这里复制对话框弹出后,无法操作父窗口
63 progressDialog->setMinimumDuration(5); //设置任务执行的预期时间,若小于此值,就不弹出复制对话框
64 progressDialog->setWindowTitle("Please Wait...");
65 progressDialog->setLabelText("Copying...");
66 progressDialog->setCancelButtonText("Cancel");
67 progressDialog->setRange(0,num);
68
69 for (int i=0;i<num;i++)
70 {
71 progressDialog->setValue(i+1); // 注意,这里是i+1,不是i,这样才能显示100%
72 qApp->processEvents(); //来正常相应时间循环,以确保应用程序不会出现阻塞。
73 QTest::qSleep(100);
74 if (progressDialog->wasCanceled()) return;
75 }
76 }
77 }
这个程序只是个实例,模拟文件的复制过程,这里用到了延时函数qSleep(),它包含于QTest类中,在使用它之前,首先要在pro文件中加入:
CONFIG +=qtestlib
注意,在加入上述声明后,运行程序以后会弹出cmd窗口,这个是正常的,QTest用来测试,默认就带cmd黑色窗口,我一开不了解,四处找去掉的原因,在实际运用过程中,我们不需要QTest类,只需要将实际的文件复制代码覆盖程序中的QTest::qSleep(100);即可...
(其实实现延时功能,用QTimer方法更好,当时就是没往这块考虑,呵呵)
http://www.cnblogs.com/hicjiajia/archive/2010/08/27/1809984.html
QProgressBar的使用例子的更多相关文章
- 【PyQt5-Qt Designer】QProgressBar() 进度条
QProgressBar() 进度条 QProgressBar简介 QProgressBar小部件提供了一个水平或垂直的进度条. 进度条用于向用户指示操作的进度,并向他们保证应用程序仍在运行. 进度条 ...
- pyqt4_应用例子(计算器,对话框,进度条,日历等等)
sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...
- 浏览器透明设置例子,qt5.6才支持
用simpleBrowser例子的基础上,在BrowserWindow构造函数修改如下 BrowserWindow::BrowserWindow(QWidget *parent, Qt::Window ...
- SQLServer地址搜索性能优化例子
这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...
- C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...
- REGEX例子
作为REGEX的例子,代码9.3显示了一个给定的文件有多少行,具有给定的模式,通过命令行输入(注:有更有效率的方式来实现这个功能,如Unix下的grep命令,在这里只是给出了另一种方式).这个程序像下 ...
- CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子
CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子 本文涉及的VolumeRendering相关的C#代码是从(https://github.com/toolchai ...
- 简单例子了解View的事件分发
什么是事件分发 我们在写自定义ViewGroup或者自定义View的时候经常要处理用户的点击事件,如果我们的View在最底层,他在很多ViewGroup里面,我们如何让我们的点击事件准确传递到View ...
- 简单的例子了解自定义ViewGroup(一)
在Android中,控件可以分为ViewGroup控件与View控件.自定义View控件,我之前的文章已经说过.这次我们主要说一下自定义ViewGroup控件.ViewGroup是作为父控件可以包含多 ...
随机推荐
- 简单几何(直线与线段相交) POJ 1039 Pipe
题目传送门 题意:一根管道,有光源从入口发射,问光源最远到达的地方. 分析:黑书上的例题,解法是枚举任意的一个上顶点和一个下顶点(优化后),组成直线,如果直线与所有竖直线段有交点,则表示能穿过管道. ...
- 最短路(Floyd_Warshall) POJ 2253 Frogger
题目传送门 /* 最短路:Floyd算法模板题 */ #include <cstdio> #include <iostream> #include <algorithm& ...
- BZOJ3680 : 吊打XXX
本题就是找一个受力平衡的点 我们一开始假设这个点是(0,0) 然后求出它受到的力,将合力正交分解后朝着合力的方向走若干步,并不断缩小步长,一步步逼近答案 #include<cstdio> ...
- 【Vijos】1792 摆花
题目链接:https://vijos.org/p/1792 算法:DP 看到这题真的一点不会...只能爆搜一下..但太太慢了..看了题解后,听说是分组背包??不知道.. 好吧,,还是百度了下题解,渐渐 ...
- 【MVC框架整合】之 SpringMVC3.2.0+MyBatis3.1.1+Spring3.2.0
1.先整合spring和Mybatis 第一步基本上都是一样加入jar包 创建测试目录 添加junit jar包和log4j配置文件 Log4j的配置文件基本上都是不会变的复制过来就行了 现在就和Hi ...
- Odoo 二次开发教程【一】 Odoo 的安装
一,安装的两种方式: 1) deb包安装: 此安装方式适用于简单不需要太多的人工干预,大多数插件都在deb中涵盖了.具体的步骤如下: 1.编辑 /etc/apt/source.list 文件,在末尾添 ...
- jquery限制div字符长度,超出部分已“…”显示
$(".content").each(function(){ if($(this).text().length>100){ $(this).text($(this).text ...
- MS10048依旧是Windows 2003 x86 的杀器
今天搞了个wow的游戏论坛,服务器环境是win03 x86+iis6.0+php+mysql. 提权的时候各种无奈,mysql无权限,而且没root,试了几个别的方法都不行,实在没办法的时候,用MS1 ...
- PHP将在对象被销毁前调用这个函数.它称为析构函数
-构造函数和析构函数 如果你在一个类中声明一个函数,命名为__construct,这个函数将被当成是一个构造函数并在建立一个对象实例时被执行.清楚地说,__是两个下划线.就像其它任何函数一样,构造函数 ...
- sql 语句大小写的问题
关键字不区分大小写 例如 select ,from, 大小写均可 标识符区分大小写 例如 表名,列名 标识符如果不加双引号,默认是按大写执行 标识符如果加双引号,则是按原始大小写执行 但是,当表名加上 ...