QT 多线程信号与槽(三)
来源:互联网 发布:淘宝拍照单反相机 编辑:程序博客网 时间:2024/05/02 04:57
这回写被大家认可的方法,继承QObject。还是主线程向子线程发信号,子线程接收信号,槽函数在新线程中运行。
mythread.h
#include <QThread>
#include <QDebug>
class Mythread : public QThread
{
Q_OBJECT
public:
Mythread();
protected:
void run();
private:
signals:
void MyThreadSignal();
public slots:
void MyThreadSlot();
};
mythread.cpp
#include "mythread.h"
#include <QDebug>
Mythread::Mythread()
{
qDebug()<<"Mythread:" <<QThread::currentThreadId();
}
void Mythread::run()
{
qDebug()<<"run:" <<QThread::currentThreadId();
exec();
}
void Mythread::MyThreadSlot()
{
qDebug()<<"from MainWindow:" <<QThread::currentThreadId();
}
myobject.h
#include <QObject>
class Myobject : public QObject
{
Q_OBJECT
public:
explicit Myobject(QObject *parent = 0);
signals:
void MyObjectSignal();
public slots:
void MyObjectSlot();
};
myobject.cpp
#include "myobject.h"
#include<QDebug>
#include<QThread>
Myobject::Myobject(QObject *parent) :
QObject(parent)
{
emit MyObjectSignal();
}
void Myobject::MyObjectSlot()
{
qDebug()<<"MyObjectSlot:" <<QThread::currentThreadId();
}
mainwindow.h#include <QMainWindow>
#include "myobject.h"
#include "mythread.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void MainWindowSlot();
signals:
void MainWindowSignal();
private:
Ui::MainWindow *ui;
Myobject q_myObj;
Mythread thread;
};
mainwindow.cpp#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(this,SIGNAL(MainWindowSignal()),&q_myObj,SLOT(MyObjectSlot()),Qt::QueuedConnection);//主线程给子线程发信号
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(MainWindowSlot()));
q_myObj.moveToThread(&thread);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::MainWindowSlot()
{
thread.start();
emit MainWindowSignal();
}
最后打印:[root@localhost thread_test2]# ./thread_test2
Mythread: 3064583888 run: 3040099216 MyObjectSlot: 3040099216
看见没?MyObjectSlot和run的线程ID是一样的,说明在子线程中运行了。
0 0
- QT 多线程信号与槽(三)
- QT 多线程信号与槽(三)
- QT 多线程信号与槽(一)
- QT 多线程信号与槽(二)
- QT 多线程信号与槽(一)
- QT 多线程信号与槽(二)
- QT中的信号-槽函数与多线程
- Qt多线程中的信号与槽
- qt 多线程 信号槽
- QT学习源网址转载1---QT多线程参数传递(信号与槽)方法
- qt 信号槽(connect)失效,【多线程使用信号槽】
- Qt 信号与信号,信号与槽
- 【QT】信号和槽机制(三)
- Qt多线程和信号与槽加载多张图片
- Qt实现多线程下的信号与槽通讯
- qt 槽与信号
- QT信号与槽
- QT 信号与槽
- PC与iPhone间的通信方式(草)
- 为什么HierachyViewer无法连接真机调试
- Linux系统服务 5 ---- Vsftpd匿名用户不能下载原因分析及解决
- 开发Qt Plugin 3
- Qt for Android 编译纯C工程
- QT 多线程信号与槽(三)
- 关于Windows下ShellCode编写的一点思考
- 游戏服务器之被动连接线程池
- ZXing简介与核心库编译
- 字符数组名可以相互赋值吗
- 影像匀色及影像匀色软件
- 全新的开始
- 深度学习的资料和代码整理
- At least one JAR was scanned for TLDs yet contained no TLDs.&Multiple bindings were found