如何解决线程之间Qt信号/插槽通信中的分段故障
我在Qt项目中包含了OpenCV,以检测视频中的部分。我有一个单独的线程,它遍历每个框架。为了调试输出,我将Mat
转换为QImage
并将引用发送到主线程,在该主线程中图像显示在QLabel
Init函数,它还会启动线程以返回第一帧。
void KeyDetectorThread::init(QString videoPath)
{
capture = new VideoCapture(videoPath.toStdString());
initiated = true;
if (!isRunning())
{
start(LowPriority);
}
}
线程在每次迭代时都会暂停,以分析每一帧,除非pauseIteration == false
void KeyDetectorThread::run()
{
Mat frame;
//while (capture->grab())
for(int i = 0; i < 10; ++i)
{
qDebug() << i;
capture->read(frame);
QImage *img = new QImage((uchar*) frame.data,frame.cols,frame.rows,frame.step,QImage::Format_RGB888);
emit imageChanged(img);
mutex.lock();
if (pauseIteration)
condition.wait(&mutex);
mutex.unlock();
}
}
主线程中的插槽:
void MainWindow::setVideoImage(QImage *image)
{
qDebug() << curVideoImg << " | " << image;
if (curVideoImg != nullptr)
{
// free memory for old image
delete curVideoImg;
}
curVideoImg = image;
QPixmap pm = QPixmap::fromImage(*curVideoImg);
int w = ui->imageOutput->width ();
int h = ui->imageOutput->height ();
ui->imageOutput->setPixmap (pm.scaled (w,h,Qt::KeepAspectRatio));
}
当线程中的迭代完成时,我在QPixmap pm = QPixmap::fromImage(*curVideoImg);
行中遇到了分段错误。我以为,当我将指针传递给信号时,就不会发生这种情况。确实,这种错误不会一直发生。我还没有找到一种模式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。