目录

理论

例子


理论

在读一篇官方文档的时候,发现可以子类化QProgressDialog,使得这个QProgressDialog更加的灵活,下面是官方对于QProgressDialog中最简单的例子:

      QProgressDialog progress("Copying files...", "Abort Copy", 0, numFiles, this);progress.setWindowModality(Qt::WindowModal);for (int i = 0; i < numFiles; i++) {progress.setValue(i);if (progress.wasCanceled())break;//... copy one file}progress.setValue(numFiles);

重新继承QProgressDialog后可以使得Dialog用起来更加的灵活方便:

class MyProgressDialog : public QProgressDialog{Q_OBJECTpublic:MyProgressDialog(const QString &titleName, QWidget *parent = Q_NULLPTR);public slots:void replyProgress(qint64 bytesRead, qint64 totalBytes);
};

函数的定义如下:

MyProgressDialog::MyProgressDialog(const QString &titleName, QWidget *parent): QProgressDialog(parent)
{setWindowTitle(titleName);
}void MyProgressDialog::replyProgress(qint64 bytesRead, qint64 totalBytes)
{//qDebug() << "bytesRead : " << bytesRead << " totalBytes :" << totalBytes;setMaximum(totalBytes);setValue(bytesRead);
}

发现这和继承QWidget等有着异曲同工之妙!!!!

下面举一个例子将说明这一点!

例子

程序结构如下图所示:

程序运行截图如下:

源码如下:

testtask.h

#ifndef TESTTASK_H
#define TESTTASK_H#include <QThread>class TestTask : public QThread
{Q_OBJECT
public:TestTask(QObject *parent = 0);~TestTask();int create(const int &total);void destroy();int getStatus();int getProgress();signals:void threadValue(int currentValue, int totalValue);private:void run();private:int m_totalByte;bool m_isRun;int m_currentByte;};#endif // TESTTASK_H

widet.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QProgressDialog>class TestTask;class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();protected slots:void btnClicked();private:TestTask *m_testTask;
};class MyProgressDialog : public QProgressDialog{Q_OBJECTpublic:MyProgressDialog(const QString &titleName, QWidget *parent = Q_NULLPTR);public slots:void replyProgress(qint64 bytesRead, qint64 totalBytes);
};#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

testtask.cpp

#include "testtask.h"
#include <QDebug>
#include <QMessageBox>TestTask::TestTask(QObject *parent) : QThread(parent)
{m_totalByte = 0;m_currentByte = 0;m_isRun = false;
}TestTask::~TestTask()
{}int TestTask::create(const int &total)
{m_totalByte = total;m_isRun = true;start();
}void TestTask::destroy()
{m_isRun = false;
}int TestTask::getStatus()
{return m_isRun;
}int TestTask::getProgress()
{return m_currentByte;
}void TestTask::run()
{while(m_isRun && (m_currentByte <= m_totalByte)){//qDebug() << "m_currentByte : " << m_currentByte << " m_totalByte : " << m_totalByte;m_currentByte++;QThread::sleep(1);threadValue(m_currentByte, m_totalByte);}
}

widget.cpp

#include "widget.h"
#include "testtask.h"
#include <QPushButton>
#include <QVBoxLayout>
#include <QDebug>
#include <QMessageBox>Widget::Widget(QWidget *parent): QWidget(parent)
{QPushButton *button = new QPushButton("button");QVBoxLayout *layout = new QVBoxLayout;connect(button, &QPushButton::clicked, this, &Widget::btnClicked);layout->addWidget(button);setLayout(layout);m_testTask = new TestTask;
}Widget::~Widget()
{}void Widget::btnClicked()
{//QMessageBox::information(this, "tip", "button clicked");MyProgressDialog *dialog = new MyProgressDialog("MyProgressDialog");connect(m_testTask, &TestTask::threadValue, dialog, &MyProgressDialog::replyProgress);m_testTask->create(20);dialog->exec();delete dialog;
}MyProgressDialog::MyProgressDialog(const QString &titleName, QWidget *parent): QProgressDialog(parent)
{setWindowTitle(titleName);
}void MyProgressDialog::replyProgress(qint64 bytesRead, qint64 totalBytes)
{//qDebug() << "bytesRead : " << bytesRead << " totalBytes :" << totalBytes;setMaximum(totalBytes);setValue(bytesRead);
}

Qt文档阅读笔记-继承QProgressDialog使得Dialog更加灵活相关推荐

  1. Qt文档阅读笔记-共享库的创建与调用

    使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...

  2. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图

    Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...

  3. Qt文档阅读笔记-Rotations Example相关

    Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...

  4. Qt文档阅读笔记-QWebEngineView及QML WebEngineView

    这里主要是最近有给Java Web项目及Qt项目需要混合,自己搞的QtWebEngine没有问题,而用了项目里面的,就有问题,在此阅读下官方资料,看看能不能解决这样莫名其妙的问题,在此记录下本次的阅读 ...

  5. Qt文档阅读笔记-对Style Plugin Example实例的解析

    目录 前言 Style Plugin Example SimpleStylePlugin Class 定义 SimpleStylePlugin Class 实现 main()函数 The Simple ...

  6. Qt文档阅读笔记-Q_PROPERTY解析及实例

    目录 官方解析 博主栗子 官方解析 这个宏用于继承于QObject的类声明属性.这样声明后的属性行为与类数据成员一样,但是他们可以通过元对象系统进行访问. Q_PROPERTY(type name(R ...

  7. Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)

    moc(Meta-Object Compiler):用于处理Qt中关于C++的扩展. moc工具读取C++头文件,看看这个头文件里面的类是不是包含Q_OBJECT宏,它会将这个头文件,转换为带有met ...

  8. Qt文档阅读笔记-Fortune Client Example实例解析

    目录 官方解析 实例代码 博主增加解析 官方解析 Fortune Client Example 以使用QTcpSocket为例子,服务端可以配合Fortune Server或Threaded Fort ...

  9. Qt文档阅读笔记-QSet官方解析及实例

    目录 官方解析 博主栗子 官方解析 QSet类是一个模板类,他是一个哈希表集合. QSet<T>是Qt的一个普通容器类.QSet存储的值是不指明顺序的,QSet对这些值提供了快速检索的功能 ...

最新文章

  1. 表达提交返回信息_盘锦市2020年义务教育阶段招生入学信息服务平台家长填报指南...
  2. 从存储区提供程序的数据读取器中进行读取时出错_三菱伺服控制程序写法破析...
  3. 【Python】APScheduler定时任务
  4. Ubuntu16.04安装WPS
  5. python while九九乘法表儿歌_python使用while循环实现九九乘法表
  6. 史上最全Html和CSS布局技巧
  7. c语言tty,1. 终端_C语言_C语言入门-Linux C编程一站式学习
  8. 解决WORD无法多次编辑保存
  9. Security+ 学习笔记14 对称密码学
  10. php mysql随机抽奖源码_PHP随机按百分比抽奖
  11. 从小到大排列组合 php,求一个一维数组中,n个元素的不同组合,并返回该数组
  12. 项目管理常用文档表格模板二
  13. ae合成设置快捷键_AE软件中最常用快捷键大全(学AE必备)
  14. S5PV210芯片的DRAM控制器介绍、初始化DDR的流程分析
  15. ffmpeg实现硬件转码(使用FFmpeg调用NVIDIA GPU实现H265转码H264)
  16. 【Java基础】类的具体细节
  17. Spring Batch之读数据—读混合记录文件(三十)
  18. 关于用51单片机内部定时器实现时钟和闹钟功能的概述
  19. 【web前端---阿里巴巴矢量图图库图标引用步骤 】
  20. 银行主要业务--资产业务第一种:贷款业务

热门文章

  1. 装箱(Boxing)和拆箱(Unboxing)
  2. [数据库字典]简单的3个SQL视图搞定所有SqlServer数据库字典
  3. 老师傅告诉你,学校学的编程知识,和工作所需要的差别有多大!
  4. 数据分析师想收入翻倍,不懂点时间管理怎么行
  5. 从报表到数据可视化,我用这五步,成功搭建银行大数据架构
  6. 正在这紧要关头的jdzyzwc
  7. 【转载】那么明亮的sz4j
  8. 爱国者首款手机正式上市 零售价不超2000元
  9. How To Set Up a TCP/IP Peer-to-Peer Network Connection
  10. 程序员的鄙视链,你被鄙视了吗?