📄 progressbar.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 + -