QThread 的moveToThread 结果并没有在子线程中运行

//<<---------------MainWindow.h文件内容------------------------>>

#include <QMainWindow>
#include <QPushButton>

class MySlotObject;
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    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_OBJECT
public:
    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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值