在项目中会出现一个问题,图像处理时需要截取多个ROI区域,进行缺陷检测,但是检测出来的缺陷标记需要在Qt界面上显示出来,ROI区域无法整合在原图像上,因此,打算将各部分ROI区域分别显示在多个QLabel控件中。
但是信号函数中传递多个图像参数和其他结构参数比较多且复杂,现使用结构体封装多张图像,然后传递结构体,实现子线程的多图像的传递。
1、步骤
-
使用Q_DECLARE_METATYPE注册自定义结构体
typedef struct img { QImage img1; QImage img2; QImage img3; QImage img4; }img; Q_DECLARE_METATYPE(img);
-
使用qRegisterMetaType注册QVariant;
qRegisterMetaType<QVariant>("QVariant");
-
将自定义结构体添加到QVariant中;
img roi; roi.img1 = img11; roi.img2 = img22; roi.img3 = img33; roi.img4 = img44; QVariant dst; dst.setValue(roi);
-
connect函数连接信号与槽;
connect(myT, &thread_deal::send_data, this, &test_1::deal_data);
-
在槽函数中还原结构体成员;
img rst = dst.value<img>();
2、结果
该工程是做一个简单的测试,原图像分成了4张ROI图像,分别显示在了4个QLabel控件上。具体代码可参考上面某篇传递vector<>参数的博客。