当程序在执行一项(或多项)耗时比较久的操作时,界面总要有一点东西告诉用户“程序还在运行中”,那么,一个“没有终点”的进度条就是你需要的了。
PS:最好把耗时的操作扔到一个子线程中去,以免他阻塞了界面线程,造成程序卡死的假象。

思路:程序很简单,一个进度条,一个定时器就足够了。

截图:

源代码:

    1. #include <QtCore>
    2. #include <QtGui>
    3. class WaitingDialog : public QDialog
    4. {
    5. Q_OBJECT
    6. private:
    7. int m_CurrentValue;         //当前值
    8. int m_UpdateInterval;       //更新间隔
    9. int m_MaxValue;             //最大值
    10. QTimer m_Timer;
    11. QProgressBar *m_ProgressBar;
    12. public:
    13. WaitingDialog(QWidget *parent = 0);
    14. ~WaitingDialog();
    15. void Start(int interval=100, int maxValue=100);
    16. void Stop();
    17. private slots:
    18. void UpdateSlot();
    19. };
    20. WaitingDialog::WaitingDialog(QWidget *parent)
    21. {
    22. m_ProgressBar = new QProgressBar(this);
    23. m_CurrentValue = m_MaxValue = m_UpdateInterval = 0;
    24. m_ProgressBar->setRange(0, 100);
    25. connect(&m_Timer, SIGNAL(timeout()), this, SLOT(UpdateSlot()));
    26. m_ProgressBar->setTextVisible(false);
    27. QHBoxLayout *layout = new QHBoxLayout;
    28. layout->addWidget(m_ProgressBar);
    29. setLayout(layout);
    30. }
    31. WaitingDialog::~WaitingDialog()
    32. {
    33. }
    34. void WaitingDialog::UpdateSlot()
    35. {
    36. m_CurrentValue++;
    37. if( m_CurrentValue == m_MaxValue )
    38. m_CurrentValue = 0;
    39. m_ProgressBar->setValue(m_CurrentValue);
    40. }
    41. void WaitingDialog::Start(int interval/* =100 */, int maxValue/* =100 */)
    42. {
    43. m_UpdateInterval = interval;
    44. m_MaxValue = maxValue;
    45. m_Timer.start(m_UpdateInterval);
    46. m_ProgressBar->setRange(0, m_MaxValue);
    47. m_ProgressBar->setValue(0);
    48. }
    49. void WaitingDialog::Stop()
    50. {
    51. m_Timer.stop();
    52. }
    53. #include "main.moc"
    54. int main(int argc, char **argv)
    55. {
    56. QApplication app(argc, argv);
    57. WaitingDialog *dialog = new WaitingDialog;
    58. dialog->setWindowTitle("Please wait...");
    59. QEventLoop *loop = new QEventLoop;
    60. dialog->Start(50, 150),
    61. dialog->show();
    62. //开启一个事件循环,10秒后退出
    63. QTimer::singleShot(10000, loop, SLOT(quit()));
    64. loop->exec();
    65. return 0;
    66. }

http://blog.csdn.net/small_qch/article/details/7664634

QT:程序忙碌时的进度条——开启时间循环,等结束的时候再退出的更多相关文章

  1. Qt编写自定义控件71-圆弧进度条

    一.前言 现在web形式的图表框架非常流行,国产代表就是echart,本人用过几次,三个字屌爆了来形容,非常强大,而且易用性也非常棒,还是开源免费的,使用起来不要太爽,内置的各种图表和仪表盘等非常丰富 ...

  2. Java实现在复制文件时使用进度条

    在对大文件操作时,可能会需要些时间,此时为用户提供进度条提示是非常常见的一项功能,这样用户就可以了解操作文件需要的时间信息.本实例为大家介绍了在复制大的文件时使用的进度条提示,需要注意的是,只有在读取 ...

  3. 微信小程序动画之圆形进度条

    微信小程序动画之圆形进度条 上图: js: //获取应用实例 var app = getApp() var interval; var varName; var ctx = wx.createCanv ...

  4. Python实现进度条和时间预估的示例代码

    一.前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  5. VS编译的QT程序发布时产生的AppCrash问题

    至少我碰到了三个情况,都是AppCrash错误(以下都指VS2008的Release的设置) 第1个错误,报错模块是程序自己 我使用VS2008 Team with SP1和QT4.86编译程序,一直 ...

  6. Qt自定义控件系列(一) --- 圆形进度条

    本系列主要使用Qt painter来实现一些基础控件.主要是对平时自行编写的一些自定义控件的总结. 为了简洁.低耦合,我们尽量不使用图片,qrc,ui等文件,而只使用c++的.h和.cpp文件. 由于 ...

  7. Qt编写自定义控件72-提示进度条

    一.前言 我们在很多的安装包中,在安装过程中,经常可以在底部看到一个漂亮的进度条,上面悬浮着显示对应的进度,然后底部进度多种颜色渐变展示,Qt自带的进度条或者操作系统的进度条样式,不够炫,这次索性直接 ...

  8. Qt编写自定义控件40-导航进度条

    一.前言 导航进度条控件,其实就是支付宝.京东.淘宝订单页面的进度控件,提示当前第几步,总共有几步,然后当前进度特殊颜色显示,每个进度带有时间文字等信息,本控件特意将三种样式风格都集成进去了,京东订单 ...

  9. Qt编写自定义控件32-等待进度条控件

    一.前言 在各种各样的执行任务界面,有时候需要比较多的时间,需要给出一个直观的等待进度条表示当前正在执行的进度,而不至于懵逼在那里,用户不会觉得程序死了还是干嘛了. 等待进度条有好几种办法,比如直接叫 ...

随机推荐

  1. LeetCode_Length of Last Word

    Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...

  2. 苹果开发证书相关BLOG与Delphi IOS环境安装(超详细)

    注:有好的资源,请添加了上传,上传后,通知管理员,删除旧文件,累积相关的学习资源,方便新手学习 一.相关论坛http://www.2ccc.com/ delphi 合子 www.2pascal.com ...

  3. C# Url编码 HtmlUrl编码

    今天看了Artwl的一片关于编码的文章,感觉写的非常好,而且人家那博客园的样式都比哥的好看得多,一幕了然,尤其是那黑色背景的H1,妈个B了,哥太喜欢了.既然如果,就来就着它的文章跟样式,顺便来总结一下 ...

  4. C# Assembly类_反射

    System.Reflection.Assembly类是一个比较常用到的类,在反射中就经常用到. 由于这个类实在有太多的字段.属性与方法.实在不想将一个个属性方法从MSDN复制出来然后逐个属性.方法敲 ...

  5. Python递归函数与斐波那契数列

    定义:在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 阶乘实例 n = int(input(">>:")) def f(n): s ...

  6. 利用Python完成一个小游戏:随机挑选一个单词,并对其进行乱序,玩家要猜出原始单词

    一 Python的概述以及游戏的内容 Python是一种功能强大且易于使用的编程语言,更接近人类语言,以至于人们都说它是“以思考的速度编程”:Python具备现代编程语言所应具备的一切功能:Pytho ...

  7. AFNetWorking网络请求

    NetWorkAPIClient.h #import <Foundation/Foundation.h> #import "AFHTTPRequestOperationManag ...

  8. 《Qt编程的艺术》——5.1 手动布局

    在传统的GUI设计中,每个控件(Widget)都要手动地绑定在窗口之上的一个点上(也就是说,这个控件被指定成了给定GUI元素的父对象),同时还要指定这个控件的高度和宽度.作为所有图形元素的基础类,QW ...

  9. apache 三种工作模式的讲解

    Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速 ...

  10. 11个有用的移动网页开发App和HTML5框架

    在过去的两年里,触屏设备飞速增长.iOS和Android设备让开发者和设计师开始重新思考他们的网页应用,以提供更好的触屏体验. 移动Web应用相对于本地的App有很多优势,虽然也有很多设计和开发上的挑 ...