⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 progressbar.cpp

📁 一个基于QT的简单程序
💻 CPP
字号:
#include "progressbar.h"

#include <qradiobutton.h>
#include <qpushbutton.h>
#include <qprogressbar.h>
#include <qlayout.h>

#include <qmotifstyle.h>

//创建一个进度条的子类
ProgressBar::ProgressBar( QWidget *parent, const char *name )
    : QButtonGroup( 0, Horizontal, "进度条测试", parent, name ), timer()
{
    setMargin( 10 );

    QGridLayout* toplayout = new QGridLayout( layout(), 2, 2, 5);  //创建一个布局管理QGridlayout

    setRadioButtonExclusive( TRUE );           //设置按钮高级为有效

   
    slow = new QRadioButton(QObject::tr("低速"), this );    //新建一个按钮名为低速
    normal = new QRadioButton(QObject::tr("中速"), this );  //新建一个按钮名为中速
    fast = new QRadioButton( QObject::tr("快速"), this );    //新建一个按钮名为快速
    QVBoxLayout* vb1 = new QVBoxLayout;
    toplayout->addLayout( vb1, 0, 0 );          //设置按钮的位置
    vb1->addWidget( slow );
    vb1->addWidget( normal );
    vb1->addWidget( fast );

   
    start = new QPushButton(QObject::tr("开始"), this );    //创建一个单击按钮名为开始
    reset = new QPushButton( QObject::tr("重启"), this );    //创建一个单击按钮名为重启
    QVBoxLayout* vb2 = new QVBoxLayout;         //设置这两个按钮的位置vb2
    toplayout->addLayout( vb2, 0, 1 );
    vb2->addWidget( start );
    vb2->addWidget( reset );

   
    progress = new QProgressBar( 100, this );        //创建一个进度条栏,并且进行布局
    toplayout->addMultiCellWidget( progress, 1, 1, 0, 1 );

    
    connect( start, SIGNAL( clicked() ), this, SLOT( slotStart() ) );  //链接start按钮的私有槽
    connect( reset, SIGNAL( clicked() ), this, SLOT( slotReset() ) );  //链接restart按钮的私有槽
    connect( &timer, SIGNAL( timeout() ), this, SLOT( slotTimeout() ) ); //链接一个timer按钮的私有槽
    normal->setChecked( TRUE );                                        //开始nomarl情况下的速度
	start->setFixedWidth( 80 );
    setMinimumWidth( 300 );
}



void ProgressBar::slotStart()
{
    //如果进度条正在进行
    if ( progress->progress() == -1 ) {
    if ( slow->isChecked() )                 //当三种不同情况按钮被选择时,进度条进行不同的频率来完成
            progress->setTotalSteps( 10000 );
        else if ( normal->isChecked() )
            progress->setTotalSteps( 1000 );
        else
            progress->setTotalSteps( 50 );
        slow->setEnabled( FALSE );             //使三个按钮无效
        normal->setEnabled( FALSE );
        fast->setEnabled( FALSE );
    }

    
    if ( !timer.isActive() ) {             //如果进度条没有启用
        
        timer.start( 1 );                //时间控制为1ms的间隔
        
        start->setText(QObject::tr("暂停") );        //开始按钮改名为暂停
    } else { 
        timer.stop();                    //要么,时间为暂停,开始按钮改名为继续
        start->setText(QObject::tr("继续") );        
    }
}



void ProgressBar::slotReset()
{
    
    timer.stop();                         //如果时间停止
    start->setText(QObject::tr("开始") );             //开始按钮改名为开始
    start->setEnabled( TRUE );            //速度选择按钮可以使用,进度条重启
    slow->setEnabled( TRUE );
    normal->setEnabled( TRUE );
    fast->setEnabled( TRUE );
    progress->reset();
}



void ProgressBar::slotTimeout()
{
    int p = progress->progress();

#if 1
    
    if ( p == progress->totalSteps() )  {
        start->setText(QObject::tr("开始") );
        start->setEnabled( FALSE );
        return;
    }
#endif
progress->setProgress( ++p );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -