0
点赞
收藏
分享

微信扫一扫

简单的QT多线程开发

weednoah 2022-04-03 阅读 78
qtc++

创建一个线程类,在主窗口中对信号和槽函数进行绑定。VS中一个Windows的API即可,QT一定要自己创建类,真是麻烦。

线程类头文件:

#ifndef TESTTHREAD_H
#define TESTTHREAD_H
#include <QThread>

class MyThread:public QThread
{
    Q_OBJECT
public:
    explicit MyThread();
    ~MyThread();

signals:
  void MsgSignal(const QString& tep);//用于向主线程传递字符串

protected:
  void run();//run 中的内容才是子线程中执行的内容!

};

#endif // TESTTHREAD_H

线程类源文件:

#include "thread.h"

MyThread::MyThread()
{

}

MyThread::~MyThread()
{

}

void MyThread::run()
{
  QString tep("test");
  emit MsgSignal(tep);
}

主窗口槽函数和线程类中的信号函数进行绑定,绑定之后即可通信:

主窗口头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include "thread.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void OnMsgSignal(const QString& tep2);//接受子线程传递字符串用于显示

private:
    Ui::MainWindow *ui;
    MyThread* m_thread;
};

#endif // MAINWINDOW_H

主窗口源文件:

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

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

    m_thread= new MyThread();
    connect(m_thread, SIGNAL(MsgSignal(const QString&)),this, SLOT(OnMsgSignal(const QString&)));//此处connect的第五个参数默认变成Qt::QueuedConnection
    m_thread->start();

}

MainWindow::~MainWindow()
{

    delete ui;
}

void MainWindow::OnMsgSignal(const QString& tep2)
{
    //使用子线程传递来的tep2
    int i=0;
    i++;
}
举报

相关推荐

0 条评论