首页 > 代码库 > QT中使用 slot 传递 opencv 中得Mat对象以及 使用多线程集成开源代码。
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
QT中使用 slot 传递 opencv 中得Mat对象以及 使用多线程集成开源代码。