Qt进度条

转自http://blog.csdn.net/aaa20090987/article/details/7664634

当程序在执行一项(或多项)耗时比较久的操作时,界面总要有一点东西告诉用户“程序还在运行中”,那么,一个“没有终点”的进度条就是你需要的了。

PS:最好把耗时的操作扔到一个子线程中去,以免他阻塞了界面线程,造成程序卡死的假象。

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


截图:



源代码:

  1. #include <QtCore>  
  2. #include <QtGui>  
  3.   
  4. class WaitingDialog : public QDialog  
  5. {  
  6.     Q_OBJECT  
  7. private:  
  8.     int m_CurrentValue;         //当前值  
  9.     int m_UpdateInterval;       //更新间隔  
  10.     int m_MaxValue;             //最大值  
  11.     QTimer m_Timer;  
  12.     QProgressBar *m_ProgressBar;  
  13. public:  
  14.     WaitingDialog(QWidget *parent = 0);  
  15.     ~WaitingDialog();  
  16.     void Start(int interval=100, int maxValue=100);  
  17.     void Stop();  
  18.     private slots:  
  19.         void UpdateSlot();  
  20. };  
  21.   
  22. WaitingDialog::WaitingDialog(QWidget *parent)  
  23. {  
  24.     m_ProgressBar = new QProgressBar(this);  
  25.     m_CurrentValue = m_MaxValue = m_UpdateInterval = 0;  
  26.     m_ProgressBar->setRange(0, 100);  
  27.     connect(&m_Timer, SIGNAL(timeout()), this, SLOT(UpdateSlot()));  
  28.     m_ProgressBar->setTextVisible(false);  
  29.     QHBoxLayout *layout = new QHBoxLayout;  
  30.     layout->addWidget(m_ProgressBar);  
  31.     setLayout(layout);  
  32. }  
  33.   
  34. WaitingDialog::~WaitingDialog()  
  35. {  
  36.   
  37. }  
  38.   
  39. void WaitingDialog::UpdateSlot()  
  40. {  
  41.     m_CurrentValue++;  
  42.     if( m_CurrentValue == m_MaxValue )  
  43.         m_CurrentValue = 0;  
  44.     m_ProgressBar->setValue(m_CurrentValue);  
  45. }  
  46.   
  47. void WaitingDialog::Start(int interval/* =100 */int maxValue/* =100 */)  
  48. {  
  49.     m_UpdateInterval = interval;  
  50.     m_MaxValue = maxValue;  
  51.     m_Timer.start(m_UpdateInterval);  
  52.     m_ProgressBar->setRange(0, m_MaxValue);  
  53.     m_ProgressBar->setValue(0);  
  54. }  
  55.   
  56. void WaitingDialog::Stop()  
  57. {  
  58.     m_Timer.stop();  
  59. }  
  60.   
  61. #include "main.moc"  
  62.   
  63. int main(int argc, char **argv)  
  64. {  
  65.     QApplication app(argc, argv);  
  66.     WaitingDialog *dialog = new WaitingDialog;  
  67.     dialog->setWindowTitle("Please wait...");  
  68.     QEventLoop *loop = new QEventLoop;  
  69.     dialog->Start(50, 150),   
  70.     dialog->show();  
  71.     //开启一个事件循环,10秒后退出  
  72.     QTimer::singleShot(10000, loop, SLOT(quit()));  
  73.     loop->exec();  
  74.     return 0;  
  75. }  
好的,我将根据您的要求为您提供有关自定义Qt进度条代码的详细回答。 在Qt中,您可以自定义进度条的外观和行为。以下是一些代码示例,演示如何创建自定义Qt进度条。 1. 创建自定义进度条类 在Qt中,您可以通过创建自定义进度条类来实现自定义进度条。以下是创建自定义进度条类的示例代码: ```cpp class MyProgressBar : public QProgressBar { public: MyProgressBar(QWidget *parent = 0); protected: virtual void paintEvent(QPaintEvent *event); }; ``` 在这个示例中,我们创建了一个名为 MyProgressBar 的类,它继承自 Qt 的 QProgressBar 类。我们重写了 paintEvent 函数,以便重绘进度条的外观。 2. 重写 paintEvent 函数 以下是一个示例代码,演示如何在自定义进度条中重写 paintEvent 函数: ```cpp void MyProgressBar::paintEvent(QPaintEvent *event) { QProgressBar::paintEvent(event); QPainter painter(this); QRect rect = QRect(0, 0, width(), height()); painter.fillRect(rect, Qt::gray); painter.fillRect(rect.adjusted(1, 1, -1, -1), Qt::white); painter.fillRect(rect.adjusted(1, 1, -1, -1), Qt::blue); } ``` 在这个示例中,我们首先调用 QProgressBar 类的 paintEvent 函数。然后,我们创建一个 QPainter 对象,并使用它绘制进度条。我们首先绘制灰色背景,然后绘制白色边框,最后绘制蓝色进度条。 3. 使用自定义进度条 在您创建了自定义进度条类之后,您可以将其用作常规进度条。以下是一个示例代码,演示如何在 Qt 中使用自定义进度条类: ```cpp MyProgressBar *myProgressBar = new MyProgressBar(this); myProgressBar->setRange(0, 100); myProgressBar->setValue(50); ``` 在这个示例中,我们首先创建了一个 MyProgressBar 类的实例,然后设置了进度条的范围和当前值。 总结 以上是关于如何在 Qt 中创建自定义进度条的示例代码。您可以根据您的需求修改这些示例代码,以便创建出符合您想要的外观和行为的自定义进度条
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值