首页 > 解决方案 > 通过槽和信号在不同线程中的两个qt对象之间进行通信

问题描述

我想连接两个在不同线程中运行的 qt 对象。(download_webm 和播放器)

int main(int argc, char *argv[])
{


    QApplication app(argc, argv);

    DownloadWebm *download_webm;

    MyThread *DownloadWebm_Thread = new  MyThread(download_webm);

    DownloadWebm_Thread->start();

    LinuWebmPlayer *player = new LinuWebmPlayer(argv[1],0);

    QObject::connect(download_webm,SIGNAL(send_packege(Video_Bytes_Package)),player,SLOT(play()));

    player->show();





    return app.exec();
}

MyThread 头文件:

#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <qthread.h>
#include <downloadwebm.h>
class MyThread : public QThread
{
    Q_OBJECT

public:
    MyThread(DownloadWebm *&we);
    MyThread();


    DownloadWebm **getWebm() const;

protected:
    DownloadWebm **webm;
    void run();
};





#endif // MYTHREAD_H

和 cpp:

#include "mythread.h"

MyThread::MyThread()
{

}

DownloadWebm **MyThread::getWebm() const
{
    return webm;
}

MyThread::MyThread(DownloadWebm *&we)
{
    webm = &we;
}

void MyThread::run()
{
   *webm = new DownloadWebm("http://trilulilu.de.de/recstreamingsource?movie=3860","asd");
}

如果我从主线评论 QObject:: 连接线,一切正常,关于 qt 中的线程之间的通信,我有什么遗漏吗?

..................................................... ……

标签: c++multithreadingqtsignals-slots

解决方案


查看Qt 文档,我们可以看到connect/ disconnect

注意:这些函数也是线程安全的:

我们可以注意到的另一件事是,connectacceptQt::ConnectionType将告诉 Qt 如何管理连接。

请参阅内容以避免意外。


推荐阅读