栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

qt如何比较简洁地启动线程?

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

qt如何比较简洁地启动线程?

一般使用QThread类启动线程的话,需要新建一个QThread的子类,然后重写run方法,操作起来有些麻烦。

可以使用movetothread;

比方说在mainwindown下启动一个线程,希望他能够执行do_something(),可以直接在mainwindow.h中新建Worker类,然后让Worker对象在线程中运行:

main.cpp 省略

mainwindow.ui 省略(就一个按钮,然后直接右击转到槽函数)

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

signals:
    void test_signal();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};

class Worker : public QObject
{
  Q_OBJECT
private slots:
    void do_something()
    {
        qDebug()<< "子线程:" << QThread::currentThreadId();
    }
};
#endif // MAINWINDOW_H

mainwindow.cpp

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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QThread *t=new QThread;
    Worker *w=new Worker;
    w->moveToThread(t);
    connect(this,SIGNAL(test_signal()),w,SLOT(do_something()));

    t->start();
    qDebug() <<"主线程:"< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768071.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号