跳转到内容
彼岸论坛
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

[Qt] 关于 QT(C++)通过继承 QObject 的方法实现多线程,子线程调用失效。


小天管理

已推荐帖子

class MyThread : public QObject{
	Q_OBJECT
	void work(){	 
    	qDebug()<<"MyThread::work() thread id: "<<QThread::currentThreadId()<<"\n";	
    }
}
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    qDebug()<<"main thread id: "<<QThread::currentThreadId()<<"\n";
    QThread* subThread = new QThread;
    MyThread* my_thread = new MyThread;
    my_thread->moveToThread(thread1);
    my_thread->start();	
    
    qDebug()<<"00000000";
    my_thread->work();
    
    connect(ui->pushButton, &QPushButton::clicked, my_thread, &MyThread::work);
    connect(ui->pushButton, &QPushButton::clicked, this, [=]{
        qDebug()<<"11111111";
    	my_thread->work();
    });
    connect(ui->pushButton, &QPushButton::clicked, my_thread, [=]{
		qDebug()<<"22222222";
        my_thread->work();
    });
}

程序执行结果:

main thread id:  0x1a70 

00000000
MyThread::work1() thread id:  0x1a70 

11111111
MyThread::work1() thread id:  0x1a70 

MyThread::work1() thread id:  0x698 

22222222
MyThread::work1() thread id:  0x698 

请问为何在主窗口中直接调用 my_thread 和
connect(ui->pushButton, &QPushButton::clicked, this, [=]{ my_thread->work(); });都是在主线程中执行,而其他两种调用方式就能正确在子线程中执行?

意见的链接
分享到其他网站

加入讨论

您现在可以发表并稍后注册. 如果您是会员,请现在登录来参与讨论.

游客
回复主题...

×   粘贴为富文本.   粘贴为纯文本来代替

  只允许使用75个表情符号.

×   您的链接已自动嵌入.   显示为链接来代替

×   您之前的内容已恢复.   清除编辑器

×   您无法直接粘贴图片.要从网址上传或插入图片.

  • 游客注册

    游客注册

  • 会员

  • 最新的状态更新

    没有最新的状态更新
  • 最近查看

    • 没有会员查看此页面.
×
×
  • 创建新的...