QThread 的moveToThread 结果并没有在子线程中运行
来源:互联网 发布:java期末考试题及答案 编辑:程序博客网 时间:2024/06/07 06:12
//<<---------------MainWindow.h文件内容------------------------>>
#include <QMainWindow>#include <QPushButton>class MySlotObject;class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow(QWidget *parent); ~MainWindow();signals: void sigOperate(); private slots: void onOperated();private: MySlotObject* slotObj; QPushButton* operatButton;};
//<<-------------------MainWindow.cpp文件内容---------------------- >>
#include "MainWindow.h" #include <QPushButton> #include <QVBoxLayout> #include "MySlotObject.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { operatButton = new QPushButton(tr("operate"), 0); connect(operatButton, SIGNAL(clicked()), this, SLOT(onOperated())); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(operatButton); QWidget *p = new QWidget; p->setLayout(layout); slotObj = new MySlotObject(this); QThread *slotthread = new QThread; slotObj->moveToThread(slotthread); connect(this, SIGNAL(sigOperate()), slotObj, SLOT(slotOperat())); slotthread->start(); qDebug() << __FUNCTION__ << QThread::currentThreadId(); setCentralWidget(p);}MainWindow::~MainWindow() {}void MainWindow::onOperated(){ qDebug() << __FUNCTION__ << QThread::currentThreadId(); emit sigOperate();}
//<<-------------------------------MySlotObject.cpp内容------------------------------->
#include "MySlotObject.h"MySlotObject::MySlotObject(QObject* parent):QObject(parent){}MySlotObject::~MySlotObject(){}void MySlotObject::slotOperat(){ qDebug() << __FUNCTION__ << QThread::currentThreadId();}
//<<----------------------------------MySlotObject.h内容------------------------------------->
#ifndef _MY_SLOT_OBJECT_H_#define _MY_SLOT_OBJECT_H_#include <QObject> #include <QDebug> #include <QThread> class MySlotObject : public QObject{ Q_OBJECTpublic: MySlotObject(QObject* parent = 0); ~MySlotObject();public slots:void slotOperat();};#endif //_MY_SLOT_OBJECT_H_
#endif //_MY_SLOT_OBJECT_H_
点击按钮operate 运行结果
发现结果不是想要的,问题的原因是
问题出现中 slotObj = new MySlotObject(this); 应该改slotObj = new MySlotObject(); //记得对象释放
再次运行:
这次运行正确了。
阅读全文
0 0
- QThread 的moveToThread 结果并没有在子线程中运行
- 一种使用QThread线程的新方法QObject::moveToThread
- 一种使用QThread线程的新方法QObject::moveToThread
- 一种使用QThread线程的新方法QObject::moveToThread
- 一种使用QThread线程的新方法QObject::moveToThread
- 一种使用QThread线程的新方法QObject::moveToThread
- 一种使用QThread线程的新方法QObject::moveToThread
- 一种使用QThread线程的新方法QObject::moveToThread
- 在Qt使用moveToThread() qt的线程
- 一种使用QThread线程的新方法QObject::moveToThread(自己测试过的源代码)
- 【Qt】QThread::moveToThread
- QThread with movetothread
- qt的QThread消息归属和MoveToThread的作用
- QThread使用——关于run和movetoThread的区别
- QThread使用——关于run和movetoThread的区别
- QThread使用——关于run和movetoThread的区别
- QThread使用——关于run和movetoThread的区别
- QT中使用另外的线程运行定时器(不用新建QThread子类)
- vs2010利用map,cod文件定位崩溃代码行
- mysql yum 离线源拉取。
- CSS样式框模式的应用——自己手写的,值得一看
- 关于两个日期之间的
- 用MATLAB编写VIVADO的coe文件
- QThread 的moveToThread 结果并没有在子线程中运行
- 关于MATLAB界面语言的设置
- javascript事件处理机制---事件监听、捕获和冒泡
- 剑指offer21从上到下打印二叉树
- 欢迎使用CSDN-markdown编辑器
- Jmeter压测查看服务器性能
- Cyl
- 代理模式 vs 装饰模式
- VTK中的地理可视化