【Qt入门实践】主线程与子线程通信(linux下)
来源:互联网 发布:大水牛软件博客 编辑:程序博客网 时间:2024/05/23 09:48
转载请注明出处:http://blog.csdn.net/feng1790291543
主线程与子线程通信主要是通过Qt上的Gui按钮,触发使得主线程上的信息发送到子线程中,并且时刻监测线程的运行情况
主线程,头文件:
#ifndef MANAGEWIDGET_H#define MANAGEWIDGET_H#include <QtGui/QWidget>#include <QtCore>//#include "childwidget.h"//#include "simplethread.h"//class ChildWidget;class SimpleThread;namespace Ui{ class ManageWidget;}class ManageWidget : public QWidget{ Q_OBJECTpublic: 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()<<"thread is starting!";}void ManageWidget::FinishReceive(){ qDebug()<<"thread is finishing!";}void ManageWidget::on_pushButtonSend_clicked(){ QString str=ui->lineEditContent->text(); emit SignalChild(str); return ;}void ManageWidget::on_pushButtonRunChild_clicked(){ qDebug()<<"Main Thread Id is "<<QThread::currentThreadId(); simple->moveToThread(child); child->start(); return ;}void ManageWidget::on_pushButton_clicked(){ qDebug()<<"first isRuning---->"<<child->isRunning(); qDebug()<<"first isFinishing---->"<<child->isFinished(); child->quit(); child->wait(); qDebug()<<"second isRuning--->"<<child->isRunning(); qDebug()<<"second isFinishing---->"<<child->isFinished(); child->deleteLater(); delete child;}
子线程头文件:
#ifndef CHILDWIDGET_H#define CHILDWIDGET_H#include <QThread>#include <QtCore>class ChildWidget : public QThread{ Q_OBJECTpublic: ChildWidget(); void run();};#endif // CHILDWIDGET_H
子线程源代码:
#include "childwidget.h"ChildWidget::ChildWidget(){}void ChildWidget::run(){ QString str="hello zhangsan"; qDebug()<<"子线程中的的run() is"<<str; exec(); return ;}
中间独立线程:
#ifndef SIMPLETHREAD_H#define SIMPLETHREAD_H#include <QObject>#include <QtCore>class SimpleThread : public QObject{ Q_OBJECTpublic: SimpleThread();private slots: void print_str(QString str);};#endif // SIMPLETHREAD_H
源代码:
#include "simplethread.h"SimpleThread::SimpleThread(){}void SimpleThread::print_str(QString str){ qDebug()<<"Simple Thread is here..."<<str; return ;}
运行效果:
0 0
- 【Qt入门实践】主线程与子线程通信(linux下)
- QT子线程与主线程的信号槽通信
- QT子线程与主线程的信号槽通信
- QT子线程与主线程的信号槽通信
- QT子线程与主线程的信号槽通信
- QT子线程与主线程的信号槽通信
- QT子线程与主线程的信号槽通信
- Qt多线程基础(三)子线程与主线程通信
- symbian 主线程与子线程通信
- Android子线程与主线程通信
- Unity子线程与主线程通信
- android 主线程与子线程通信
- 主线程与子线程互相通信
- 跨线程、进程通信,主线程与子线程通信
- QT主线程与子线程通信处理QWT绘制曲线(动态,可重复绘制多张)
- Qt主线程与子线程之间的信号槽通信
- qt 与ros 实现UI界面下主线程与子线程双向通信
- Java主线程与子线程的通信
- CSS 学习笔记
- amiao布局样式----列表方框
- MySQL基本使用命令中的5大命令
- ueditor单独调用图片上传
- __delphirtti System::Typinfo::GetEnumName
- 【Qt入门实践】主线程与子线程通信(linux下)
- Bresenham改进算法结合wu反走样算法画颜色渐变直线
- 构建高性能web站点
- [Latex]几招压缩Latex paper的页数
- 交换机工作原理
- 复习IPV4地址
- Eclipse实用插件
- 20140509
- js操作string之substr方法