今天下午动手实践了一下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的使用例子的更多相关文章

  1. 【PyQt5-Qt Designer】QProgressBar() 进度条

    QProgressBar() 进度条 QProgressBar简介 QProgressBar小部件提供了一个水平或垂直的进度条. 进度条用于向用户指示操作的进度,并向他们保证应用程序仍在运行. 进度条 ...

  2. pyqt4_应用例子(计算器,对话框,进度条,日历等等)

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  3. 浏览器透明设置例子,qt5.6才支持

    用simpleBrowser例子的基础上,在BrowserWindow构造函数修改如下 BrowserWindow::BrowserWindow(QWidget *parent, Qt::Window ...

  4. SQLServer地址搜索性能优化例子

    这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...

  5. C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

    第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...

  6. REGEX例子

    作为REGEX的例子,代码9.3显示了一个给定的文件有多少行,具有给定的模式,通过命令行输入(注:有更有效率的方式来实现这个功能,如Unix下的grep命令,在这里只是给出了另一种方式).这个程序像下 ...

  7. CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子

    CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子 本文涉及的VolumeRendering相关的C#代码是从(https://github.com/toolchai ...

  8. 简单例子了解View的事件分发

    什么是事件分发 我们在写自定义ViewGroup或者自定义View的时候经常要处理用户的点击事件,如果我们的View在最底层,他在很多ViewGroup里面,我们如何让我们的点击事件准确传递到View ...

  9. 简单的例子了解自定义ViewGroup(一)

    在Android中,控件可以分为ViewGroup控件与View控件.自定义View控件,我之前的文章已经说过.这次我们主要说一下自定义ViewGroup控件.ViewGroup是作为父控件可以包含多 ...

随机推荐

  1. AppleWatch开发教程之调试程序使用帮助文档

    AppleWatch开发教程之调试程序使用帮助文档 AppleWatch开发教程之调试程序 调试又被称为排错,是发现和减少程序错误的一个过程.在Xcode中进行调试的需要实现以下几个步骤: 1.添加断 ...

  2. 错误:不存在类型或命名空间名称 "Control”

    编译时出现如下错误: 命名空间中不存在类型或命名空间名称 "Control"(是否缺少程序集引用?).     在引用中添加UIAutomationProvider后解决.

  3. 20145315 《Java程序设计》实验三实验报告

    实验三 敏捷开发与XP实践 实验内容 下载并学会使用git上传代码: 与同学结对,相互下载并更改对方代码,并上传: 实现代码的重载. 实验步骤 下载并用git上传代码: 1.下载并安装好git,在cm ...

  4. android环境安装之android4.2安装(转)

    准备学习android,着手安装android时听说很麻烦,在网上看了很多android安装说明,都是android比较早的版本,我这里安装了android4.2,简单记录一下. 安装分为几步,首先申 ...

  5. JAVA获取两个List<String>中不同的数据

    效率非常不错 测试结果: 1.list1中有97277条数据,list2中有37894条数据,两个list进行对比找出不同的数据共60000条左右,用时:0.051秒 2.list1中有97277条数 ...

  6. 怎么通过URL访问到服务器上的物理文件

    目的 :搞清楚在jsp页面中如何引用static目录结构中的静态资源 一.URL URL的全称是统一资源定位符,俗称网页地址(网址),如同在网络上的门牌,是因特网上标准的资源的地址(Address). ...

  7. juniper-cisco-HP上网设置

    网络拓扑: 路由模式: 第一步.配置防火墙的接口地址 编辑外网接口: 配置内网口(原理同上)(interface mode:nat) 第二步.配置防火墙的路由 第三步.配置防火墙安全策略 Cisco交 ...

  8. php 类

    <?php class mysql{ private $host; private $name; private $pass; private $table; private $ut; func ...

  9. 利用poi开源jar包操作Excel时删除行内容与直接删除行的区别

    一般情况下,删除行时会面临两种情况:删除行内容但保留行位置.整行删除(删除后下方单元格上移).对应的删除方法分别是: void removeRow(Row row)//Remove a row fro ...

  10. MongoDB数据备份与恢复

    测试环境:windows 一. 导出数据F:\DbSoft\soft\master\bin>mongoexport /h 127.0.0.1 /port 50000 /d testdb /c t ...