19、Qt线程(四):继承QRunnable类

一、功能说明

1、通过继承QRunnable,重写run的方式实现多线程

2、点击“开始”按钮启动子线程;

二、项目创建

1、新建Qt Widgets Application应用,名称为Runnable,基类选择QMainWindow;

2、MainWindow.ui中放入一个Push Button按钮,第一个text改为“开始”,objectNme改为startPushButton;

3、添加新的C++类,名称为MyRunnable,基类设置为QRunnable

4、注:

QRunnable的使用方式与QThread类似,但是QRunnable不能使用信号槽,可以使用QMetaObject::invokeMethod()

三、代码展示

1、myrunnable.h

#ifndef MYRUNNABLE_H
#define MYRUNNABLE_H

#include 
#include 

class MyRunnable : public QRunnable
{
public:
    explicit MyRunnable();
    ~MyRunnable();

protected:
    void run();
};

#endif // MYRUNNABLE_H

2、myrunnable.cpp

#include "myrunnable.h"
#include 
#include 

MyRunnable::MyRunnable()
{
    qDebug() << "MyRunnable(): " << QThread::currentThreadId();
}

MyRunnable::~MyRunnable()
{
    qDebug() << "~MyRunnable(): " << QThread::currentThreadId();
}

void MyRunnable::run()
{
    qDebug() << "MyRunnable::run()" << QThread::currentThreadId();
}

3、mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include "myrunnable.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_startPushButton_clicked();

private:
    Ui::MainWindow *ui;

    MyRunnable *m_myRunnable;
};

#endif // MAINWINDOW_H

4、mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
#include 
#include 

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_myRunnable = new MyRunnable;
    qDebug() << "MainWindow() " << QThread::currentThreadId();
}

MainWindow::~MainWindow()
{
    if(!m_myRunnable)
    {
        delete m_myRunnable;
        m_myRunnable = nullptr;
    }
    delete ui;
}

void MainWindow::on_startPushButton_clicked()
{
    qDebug() << "on_startPushButton_clicked() " << QThread::currentThreadId();
    QThreadPool::globalInstance()->start(m_myRunnable);
}

四、运行测试

运行程序,点击开始,输出框输出如下信息

19、Qt线程(四):继承QRunnable类_第1张图片

你可能感兴趣的:(Qt小功能,qt,开发语言)