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 <QRunnable>
#include <QWidget>

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

protected:
    void run();
};

#endif // MYRUNNABLE_H

2、myrunnable.cpp

#include "myrunnable.h"
#include <QDebug>
#include <QThread>

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 <QMainWindow>
#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 <QThread>
#include <QDebug>
#include <QThreadPool>

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);
}

四、运行测试

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

相关推荐

  1. Qt线封装FFmpeg播放器

    2023-12-26 07:00:03       45 阅读
  2. Qt的多线

    2023-12-26 07:00:03       38 阅读
  3. Qt + HTTP 线交互封装

    2023-12-26 07:00:03       38 阅读
  4. 力学笃行(Qt 线与信号槽

    2023-12-26 07:00:03       25 阅读
  5. Qt中使用线QThread

    2023-12-26 07:00:03       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-26 07:00:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-26 07:00:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-26 07:00:03       87 阅读
  4. Python语言-面向对象

    2023-12-26 07:00:03       96 阅读

热门阅读

  1. Word使用技巧【开题报告】

    2023-12-26 07:00:03       62 阅读
  2. 【Vue3】Vue3使用video-player实现视频播放

    2023-12-26 07:00:03       62 阅读
  3. [node] Node.js的文件系统

    2023-12-26 07:00:03       49 阅读
  4. Web前端框架全景:流行选择与技术趋势

    2023-12-26 07:00:03       49 阅读
  5. HttpURLConnection发送各种内容格式

    2023-12-26 07:00:03       44 阅读
  6. spring基于Xml管理bean---自动装配

    2023-12-26 07:00:03       69 阅读
  7. mybatis中xml接收参数值

    2023-12-26 07:00:03       60 阅读
  8. React+umi+antdesign实现上传文件组件(阿里云)

    2023-12-26 07:00:03       51 阅读
  9. Python:GUI & Tkinter

    2023-12-26 07:00:03       54 阅读
  10. 第二百二十八回

    2023-12-26 07:00:03       61 阅读
  11. Microsoft Edge的详细使用方法和心得

    2023-12-26 07:00:03       52 阅读
  12. 一个WebSocket的自定义hook

    2023-12-26 07:00:03       59 阅读