两种进度条显示:
QProgressBar和QProgressDialog
下面例子展示两种进度条:
代码:
头文件dialog.h中:
#include <QtGui/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(); private slots: void startProgress(); private: QLabel *FileNum; QLineEdit *FileNumLineEdit; QLabel *ProgressType; QComboBox *comboBox; QProgressBar *progressBar; QPushButton *startBtn; QGridLayout *mainLayout; };
#include "dialog.h" #include <QProgressDialog> #include <QFont> Dialog::Dialog(QWidget *parent) : QDialog(parent) { setWindowTitle(tr("Progress")); FileNum=new QLabel; FileNum->setText(tr("文件数目:")); FileNumLineEdit=new QLineEdit; FileNumLineEdit->setText(tr("10000")); ProgressType=new QLabel; ProgressType->setText(tr("显示类型:")); comboBox=new QComboBox; comboBox->addItem(tr("progressBar")); comboBox->addItem(tr("progressDialog")); progressBar=new QProgressBar; startBtn=new QPushButton; startBtn->setText(tr("开始")); mainLayout=new QGridLayout(this); mainLayout->addWidget(FileNum,0,0); mainLayout->addWidget(FileNumLineEdit,0,1); mainLayout->addWidget(ProgressType,1,0); mainLayout->addWidget(comboBox,1,1); mainLayout->addWidget(progressBar,2,0,1,2); mainLayout->addWidget(startBtn,3,1); mainLayout->setMargin(15); mainLayout->setSpacing(10); connect(startBtn,SIGNAL(clicked()),this,SLOT(startProgress())) }
void Dialog::startProgress() { bool ok; int num=FileNumLineEdit->text().toInt(&ok); if(!ok) return; if(comboBox->currentIndex()==0) { progressBar->setRange(0,num); for(int i=1;i<=num;i++) { progressBar->setValue(i); } } else if(comboBox->currentIndex()==1) { QProgressDialog *progressDlg=new QProgressDialog(this); QFont font("ZYSong18030",12); progressDlg->setFont(font); progressDlg->setWindowModality(Qt::WindowModal); progressDlg->setMinimumDuration(5); progressDlg->setWindowTitle(tr("please wait")); progressDlg->setLabelText(tr("正在复制...... ")); progressDlg->setCancelButtonText(tr("取消")); progressDlg->setRange(0,num); for(int i=1;i<=num;i++) { progressDlg->setValue(i); if(progressDlg->wasCanceled()) return; } } }
main函数添加显示中文的代码:
#include <QtGui/QApplication> #include "dialog.h" #include <QTextCodec> int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); Dialog w; w.show(); return a.exec(); }