一般使用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() <<"主线程:"<



