Qt之主线程与子线程通信(linux下)

转载请注明出处:http://blog.csdn.net/feng1790291543

主线程与子线程通信主要是通过Qt上的Gui按钮,触发使得主线程上的信息发送到子线程中,并且时刻监测线程的运行情况

094007410.jpg

主线程,头文件:

#ifndef MANAGEWIDGET_H

#define MANAGEWIDGET_H

#include

#include

//#include "childwidget.h"

//#include "simplethread.h"

//class ChildWidget;

class SimpleThread;

namespace Ui

{

class ManageWidget;

}

class ManageWidget : public QWidget

{

Q_OBJECT

public:

ManageWidget(QWidget *parent = 0);

~ManageWidget();

private:

Ui::ManageWidget *ui;

//ChildWidget *child;

QThread *child;

SimpleThread *simple;

private slots:

void on_pushButton_clicked();

void on_pushButtonRunChild_clicked();

void on_pushButtonSend_clicked();

void StartReceive();

void FinishReceive();

signals:

void SignalChild(QString str);

};

#endif // MANAGEWIDGET_H

源文件:

#include "managewidget.h"

#include "ui_managewidget.h"

#include "childwidget.h"

#include "simplethread.h"

ManageWidget::ManageWidget(QWidget *parent)

: QWidget(parent), ui(new Ui::ManageWidget)

{

ui->setupUi(this);

simple=new SimpleThread;

//child=new ChildWidget;

child=new QThread;

connect(this,SIGNAL(SignalChild(QString)),simple,SLOT(print_str(QString)));

connect(child,SIGNAL(started()),this,SLOT(StartReceive()));

//connect(child,SIGNAL(finished()),this,SLOT(FinishReceive()));

}

ManageWidget::~ManageWidget()

{

delete ui;

}

void ManageWidget::StartReceive()

{

qDebug()<

}

void ManageWidget::FinishReceive()

{

qDebug()<

}

void ManageWidget::on_pushButtonSend_clicked()

{

QString str=ui->lineEditContent->text();

emit SignalChild(str);

return ;

}

void ManageWidget::on_pushButtonRunChild_clicked()

{

qDebug()<

simple->moveToThread(child);

child->start();

return ;

}

void ManageWidget::on_pushButton_clicked()

{

qDebug()<"<isRunning();

qDebug()<"<isFinished();

child->quit();

child->wait();

qDebug()<"<isRunning();

qDebug()<"<isFinished();

child->deleteLater();

delete child;

}

子线程头文件:

#ifndef CHILDWIDGET_H

#define CHILDWIDGET_H

#include

#include

class ChildWidget : public QThread

{

Q_OBJECT

public:

ChildWidget();

void run();

};

#endif // CHILDWIDGET_H

子线程源代码:

#include "childwidget.h"

ChildWidget::ChildWidget()

{

}

void ChildWidget::run()

{

QString str="hello zhangsan";

qDebug()<

exec();

return ;

}

中间独立线程:

#ifndef SIMPLETHREAD_H

#define SIMPLETHREAD_H

#include

#include

class SimpleThread : public QObject

{

Q_OBJECT

public:

SimpleThread();

private slots:

void print_str(QString str);

};

#endif // SIMPLETHREAD_H

源代码:

#include "simplethread.h"

SimpleThread::SimpleThread()

{

}

void SimpleThread::print_str(QString str)

{

qDebug()<

return ;

}

运行效果:

094007411.jpg

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐