概述
运行时报错 : ASSERT failure in QCoreApplication::sendEvent: “Cannot send events to objects owned by a different thread. Current thread 0x0x128c05a8. Receiver ‘’ (of type ‘DirectShowIOReader’) was created in thread 0x0x20c6eeb0”。
有道翻译:在QCoreApplication::sendEvent 中 ASSERT 失败:“不能发送事件到不同线程拥有的对象。” 当前线程0 x0x1f1105a8。 接收器"(类型’ directshowiereader ')被创建在线程0x0x20c402e8“
原因:发送事件的对象 与 接收事件的对象 所处线程不同
sendEvent:Current thread 0x0x128c05a8
Receiver was created in thread 0x0x20c6eeb0
解决:通过发信号方式调用槽函数。
#include "SoundPlayer.h"
CSoundPlayer::CSoundPlayer(QObject *parent)
: QObject(parent)
, m_bFlag(false)
{
// m_pMediaPlayer = new QMediaPlayer(this); // error
m_pMediaPlayer = new QMediaPlayer(); // true
m_pMediaPlayer->setMedia(QUrl("qrc:/sounds/Sounds/voice00.mp3"));
connect(m_pMediaPlayer,&QMediaPlayer::stateChanged,this,&CSoundPlayer::__onStateChanged);
connect(&m_Timer,&QTimer::timeout,this,&CSoundPlayer::__onTimerOut);
connect(this,&CSoundPlayer::__signalSetMedia,m_pMediaPlayer,&QMediaPlayer::setMedia);
this->moveToThread(&m_Thread);
m_Timer.moveToThread(&m_Thread);
}
void CSoundPlayer::__setMediaPlayerAudio(QString strAudioUrl)
{
// m_pMediaPlayer->setMedia(QUrl(strAudioUrl)); // error 直接设置
emit __signalSetMedia(QUrl(strAudioUrl),NULL); // ture 通过信号方式进行setMedia()操作
}
最后
以上就是天真翅膀为你收集整理的Qt Error : 在子线程中使用QMediaPlayer::setMedia() 设置时一直报错 : ASSERT failure in QCoreApplication.....的全部内容,希望文章能够帮你解决Qt Error : 在子线程中使用QMediaPlayer::setMedia() 设置时一直报错 : ASSERT failure in QCoreApplication.....所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复