Qt QProgressBar 重写前的练习,了解Qt 槽函数的线程机制
来源:互联网 发布:ubuntu kylin 14.04 编辑:程序博客网 时间:2024/06/13 21:27
我把主要对代码的分析写到注释里面了:
上代码吧:
例子原型,来源于网络:
MainWindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QLabel>#include <QLineEdit>#include <QProgressBar>#include <QComboBox>#include <QPushButton>#include <QGridLayout>#include <QDialog>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private slots: void startProgress(); // 开始进程private: Ui::MainWindow *ui; // 主窗口 QLabel * FileNum; QLineEdit * FileNumLineEdit; QLabel *ProgressType; QComboBox * comboBox; QProgressBar *ProgressBar; QPushButton *startBtn; QGridLayout *mainLayout; QDialog * dialog; // 用于声明一个对话框,因为布局不能再主窗口之上。};#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QFont>#include <QProgressDialog>#include <QDialog>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); setWindowTitle(tr("Progress")); FileNum = new QLabel(); // 下面一样,因为要使用布局管理器,所以不要初始化父对象 FileNum ->setText(tr("文件数目:")); // FileNum->show(); FileNumLineEdit = new QLineEdit(); // FileNumLineEdit->show(); FileNumLineEdit->setText(tr("10000")); ProgressType = new QLabel(); // ProgressType->show(); ProgressType->setText(tr("显示类型:")); comboBox = new QComboBox(); // comboBox->show(); comboBox ->addItem(tr("progressBar")); comboBox ->addItem(tr("progressDialog")); ProgressBar = new QProgressBar(); //ProgressBar->show(); startBtn = new QPushButton(); //startBtn->show(); startBtn -> setText(tr("开始")); dialog = new QDialog(this); // 创造新的对话框对象 mainLayout = new QGridLayout(dialog); //dialog->show(); 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); //dialog->setMinimumSize(500, 500); dialog->show(); connect(startBtn,SIGNAL(clicked()),this, SLOT(startProgress())); // 信号与槽的机制,这种机制很是奇妙,是一种独特的设计模式 //QProgressDialog *progressDlg = new QProgressDialog(dialog); //这个测试了,只要 QProgressDialog 进行生成,就会自动调用 //show(); 函数来进行展示视图。}void MainWindow::startProgress(){ bool ok; int num = FileNumLineEdit->text().toInt(&ok); // 进行取值,这里面 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(dialog); //QFont font("ZYSong18030", 12); //progressDlg->setFont(font); //progressDlg->show(); // 看来这时不要进行show 的设置工作了,有一种机制可以自动调用show()函数 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; } } }} // 并且,通过不断点击PushButton 按键可以看出,每个信号与槽,都是一个独立的线程,并且其中有线程锁,同时想修改同一个对象的时候,只有// 一个线程修改过,才能使用另外一个线程,来进行访问,这些似乎更好玩,等我们过几天来进行运用多线程机制来进行应用的扩散。MainWindow::~MainWindow(){ delete ui; // 这些是图形界面的标志视图,用来进行显示其中的图像的情况。}
main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; // 运行主窗口的类对象 w.show(); return a.exec();}
运行结果:
QProgress
QProgressDialog:
我是奔跑的Q, 交流邮箱: yaowen_contact#163.com (# 转化为 @ ) 注意分析问题要从更高的角度
0 0
- Qt QProgressBar 重写前的练习,了解Qt 槽函数的线程机制
- Qt 中QProgressBar 的使用
- QT学习------关于QProgressBar控件的使用!
- Qt自定义控件之------QProgressBar的自定义
- Qt控件函数的重写
- 学习QT前需了解的知识
- Qt中如何改变QProgressBar中进度条的颜色
- QT类中keyPressEvent函数的重写
- Qt-----进度条QProgressBar
- Qt-----进度条QProgressBar
- qt 之 qprogressbar
- QT自定义QProgressBar
- Qt之QProgressBar
- QT的了解过程
- QT的信号/槽机制
- QT的信号/槽机制
- Qt的信号槽机制
- QT之qss教程-QProgressBar
- 四柱汉诺塔
- GC知识要点回顾
- 利用艺术家的整数ID映射将标签转换为向量
- selector修改TextView中字体的颜色
- 组合部分标签向量并累加成完整向量
- Qt QProgressBar 重写前的练习,了解Qt 槽函数的线程机制
- 使用excel来快捷计算日期的方法
- javascript--判空判等
- html js mysq 命名规范
- VS2015 调试失败 提示拒绝访问解决方法
- jenkins 安装
- 用onkeyup来实现html输入框的协同变化
- VMware中虚拟机复制的问题
- 推荐10本C#编程的最佳书籍