这个程序有几个bug,估计出书的时候也没考虑吧,我是新手,一时间也找不到好的思路。去一个群里问了,结果遇到装逼帝,自从这货来了,群里问问题都没人回答了,他总是第一个出来装逼,然后还不回答你,唉,比我们这些新手多学几天罢了,看到装逼帝真心难受。
老规矩,头文件:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QProgressBar>
#include <QComboBox>
#include <QPushButton>
#include <QGridLayout>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
public slots:
void startProgress();
private:
QLabel *FileNum;
QLineEdit *FileNumLineEdit;
QLabel *progressType;
QComboBox *comBox;
QProgressBar *progressBar;
QPushButton *startBtn;
QGridLayout *mainLayout;
};
#endif // DIALOG_H
源文件:
#include "dialog.h"
#include <QProgressBar>
#include <QFont>
#include <QProgressDialog>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
QFont font("ZYSong18030",12);
setFont(font);
setWindowTitle("progress");
FileNum =new QLabel;
FileNum->setText("文件数目:");
FileNumLineEdit=new QLineEdit;
FileNumLineEdit->setText("100000");
progressType=new QLabel;
progressType->setText("显示类型");
comBox=new QComboBox;
comBox->addItem("progressbar");
comBox->addItem("progressdialog");
progressBar=new QProgressBar;
startBtn=new QPushButton;
startBtn->setText("开始");
mainLayout=new QGridLayout(this);
mainLayout->addWidget(FileNum,0,0);
mainLayout->addWidget(FileNumLineEdit,0,1);
mainLayout->addWidget(progressType,1,0);
mainLayout->addWidget(comBox,1,1);
mainLayout->addWidget(progressBar,2,0,1,2);
mainLayout->addWidget(startBtn,3,1);
mainLayout->setMargin(15);
mainLayout->setSpacing(10);
connect(startBtn,SIGNAL(clicked(bool)),this,SLOT(startProgress()));
}
void Dialog::startProgress()
{
bool ok;
int num=FileNumLineEdit->text().toInt(&ok);
if(comBox->currentIndex()==0)
{
progressBar->setRange(0,num);
for(int i=1;i<num+1;i++)
{
progressBar->setValue(i);
}
}
else if (comBox->currentIndex()==1) {
QProgressDialog *progressdialog=new QProgressDialog(this);
QFont font("ZYSong18030",12);
progressdialog->setFont(font);
progressdialog->setWindowModality(Qt::WindowModal);
progressdialog->setMinimumDuration(5);
progressdialog->setWindowTitle("请稍等");
progressdialog->setCancelButtonText("取消");
progressdialog->setRange(0,num);
for(int i=0;i<num+1;i++)
{
progressdialog->setValue(i);
if(progressdialog->wasCanceled())
return;
}
}
}
Dialog::~Dialog()
{
}
运行结果:
几个bug:点击关闭按钮,在运行中不能关闭;多次单击按钮多次执行;progressbar执行时候不能做其他操作,不然会崩溃。