我正在努力寻找以下问题的正确解决方案(如下所述),现在我没有更多的想法。因此,我需要更有经验的开发人员的帮助:
我有一个独立于QT的类(我希望它保持这样),它在一个secundary线程中生成openCV图像。然后它会引发一个传递图像的事件。
while (1)
{
if (timerActived & this->_camReady)
{
vector<Mat>* images = new vector<Mat>;
images = this->AcquireImg();
__raise this->frameAcquired(images);
}
this_thread::sleep_for(chrono::milliseconds(_frameTimeLaps));
}
此事件被我的MainWindow挂钩,一个方法应该在我的GUI上显示我的图像。
void MainWindow::displayFrame(vector<Mat>* frames) {
vector<Mat>* frames2 = new vector<Mat>();
frames2 = frames;
for (int i = 0; i < frames2->size(); ++i) {
this->camFrames->at(i)->showImage(frames2->at(i));
}
}
在runTime期间,当主线程访问图像时,我收到以下错误:
QCoreApplication :: sendEvent中的ASSERT失败:“无法将事件发送到不同线程拥有的对象。
我知道我没有正确使用线程,但我现在不知道如何创建异步事件。
谢谢你的帮助, 的Valentin
在我看来,真正的问题是:我可以使用普通的std :: thread和native事件与主Qthread进行通信吗?
答案 0 :(得分:1)
毕竟,这是解决问题的解决方案。
这个想法是让主线程访问来自第二个线程的Mat。所以我修改了我的函数displayFrame,如下所示:
data () {
return {
email: '',
}
},
methods: {
submit () {
alert(this.$data.email)
}
}
新功能showImg正在执行旧的displayFrame。信号/插槽进程允许根据需要从GUI线程访问图像。