QT中使用 slot 传递 opencv 中得Mat对象以及 使用多线程集成开源代码。

关于 slot传递 Mat 对象

以前一直是使用 Qtimer 定时器,设定超时后读取 dialog 对象的 Mat成员实现在 UI 里显示图像,发现这样对以后集成其他面向过程的代码增加了复杂度。

所以考虑使用 slot

即使用多线程处理图像后,发送 signal 给 dialog对象,dialog中 connect 他们就行了。

子线程.cpp

...

for(;;){

...

emit imageChanged (labelImg);

...

}

emit finished();

...

dialog.h

...

private slots:
void updateImage(const cv::Mat &img);

...

dialog.cpp

...

qRegisterMetaType< cv::Mat >("cv::Mat");
connect(worker, SIGNAL(imageChanged(const cv::Mat &)), this, SLOT(updateImage(const cv::Mat &)));

...

子线程.h

...

signals:
void imageChanged(const cv::Mat &img);

...

//////////////

父类 Worker

public slots:
virtual void doWork();

子线程

class CTWorker : public Worker

{
public:
CTWorker();
public slots:
void doWork(); //覆盖就 OK 了
};

#endif // CTWORKER_H

原文地址:https://www.cnblogs.com/yuliyang/p/4201925.html