创建一个线程类,在主窗口中对信号和槽函数进行绑定。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++;
}