Qt之QThread(深入理解).docVIP

  • 115
  • 0
  • 约8.62千字
  • 约 18页
  • 2018-06-03 发布于江西
  • 举报
Qt之QThread(深入理解).doc

Qt之QThread(深入理解) 简述 为了让程序尽快响应用户操作,在开发应用程序时经常会使用到线程。对于耗时操作如果不使用线程,UI界面将会长时间处于停滞状态,这种情况是用户非常不愿意看到的,我们可以用线程来解决这个问题。 前面,已经介绍了QThread常用的两种方式: Worker-Object 子类化QThread 下面,我们来看看子类化QThread在日常中的应用。 大多数情况下,多线程耗时操作会与UI进行交互,比如:显示进度、加载等待。。。让用户明确知道目前的状态,并对结果有一个直观的预期,甚至有趣巧妙的设计,能让用户爱上等待,把等待看成一件很美好的事。 子类化QThread 下面,是一个使用多线程操作UI界面的示例 - 更新进度条。与此同时,分享在此过程中有可能遇到的问题及解决方法。 定义一个WorkerThread类,让其继承自QThread,并重写run()函数,每隔50毫秒更新当前值,然后发射resultReady()信号(用于更新进度条)。 #include QThread class WorkerThread : public QThread { Q_OBJECT public: explicit WorkerThread(QObject *parent = 0) : QThread(parent) { qDebug() Worker Thread : QThread::currentThreadId(); } protected: virtual void run() Q_DECL_OVERRIDE { qDebug() Worker Run Thread : QThread::currentThreadId(); int nValue = 0; while (nValue 100) { // 休眠50毫秒 msleep(50); ++nValue; // 准备更新 emit resultReady(nValue); } } signals: void resultReady(int value); }; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 构建一个主界面 - 包含按钮、进度条,当点击“开始”按钮时,启动线程,更新进度条。 class MainWindow : public CustomWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0) : CustomWindow(parent) { qDebug() Main Thread : QThread::currentThreadId(); // 创建开始按钮、进度条 QPushButton *pStartButton = new QPushButton(this); m_pProgressBar = new QProgressBar(this); //设置文本、进度条取值范围 pStartButton-setText(QString::fromLocal8Bit(开始)); m_pProgressBar-setFixedHeight(25); m_pProgressBar-setRange(0, 100); m_pProgressBar-setValue(0); QVBoxLayout *pLayout = new QVBoxLayout(); pLayout-addWidget(pStartButton, 0, Qt::AlignHCenter); pLayout-addWidget(m_pProgressBar); pLayout-setSpacing(50); pLayout-setContentsMargins(10, 10, 10, 10); setLayout(pLayout); // 连接信号槽 connect(pStartBut

文档评论(0)

1亿VIP精品文档

相关文档