64,637
社区成员
发帖
与我相关
我的任务
分享
void Widget::showImage(QImage *image)
{
ui->label_show->setScaledContents(true);
ui->label_show->setPixmap(QPixmap::fromImage(*image));
}
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QThread>
#include <QImage>
#include "MvCameraControl.h"
#include "camthread.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
signals:
void needDeviceListSignal();//发送信号获取设备列表
void needGrabImage(int Id,MV_CC_DEVICE_INFO_LIST list);
private slots:
void getDeviceList(QString *text,MV_CC_DEVICE_INFO_LIST list);//获取设备列表并显示
void showImage(QImage *image);//显示图片槽函数
private slots:
void on_pushButton_seachDevice_clicked();
void on_pushButton_grabImage_clicked();
private:
QThread *thread;
CamThread *cam1;
MV_CC_DEVICE_INFO_LIST stDeviceList;//设备列表全局函数
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMetaType>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
qRegisterMetaType<MV_CC_DEVICE_INFO_LIST>("MV_CC_DEVICE_INFO_LIST");
/* * 初始化对象* */
cam1 = new CamThread();
thread = new QThread(this);
cam1->moveToThread(thread);
/* * 信号槽 * */
connect(this,&Widget::needDeviceListSignal,cam1,&CamThread::EnumDevice);//调用线程查询设备列表
connect(cam1,&CamThread::sendDeviceListSignal,this,&Widget::getDeviceList,Qt::DirectConnection);//根据线程查询列表返回信息调用显示槽函数
connect(this,&Widget::needGrabImage,cam1,&CamThread::connectDevice);//调用连接设备及取图函数
connect(cam1,&CamThread::sendImageSignal,this,&Widget::showImage);//通过传递回的信号调用图像显示函数
}
Widget::~Widget()
{
delete ui;
cam1->isOpen = false;
thread->quit();
thread->wait();
}
void Widget::getDeviceList(QString *text,MV_CC_DEVICE_INFO_LIST list)
{
stDeviceList = list;
ui->comboBox_DeviceList->addItem(*text);
}
void Widget::showImage(QImage *image)
{
ui->label_show->setScaledContents(true);
ui->label_show->setPixmap(QPixmap::fromImage(*image));
}
void Widget::on_pushButton_seachDevice_clicked()//按下查询设备列表按钮
{
thread->start();
emit needDeviceListSignal();
qDebug()<< "发送查询信号";
}
void Widget::on_pushButton_grabImage_clicked()//按下采集按钮
{
int Id = ui->comboBox_DeviceList->currentIndex();
emit needGrabImage(Id,stDeviceList);
}
void CamThread::GetImage(void *handle,MV_FRAME_OUT_INFO_EX stImageInfo,unsigned char * pData)//循环取图
{
while (isOpen)
{
int nRet = MV_CC_GetOneFrameTimeout(handle, pData, g_nPayloadSize, &stImageInfo, 100);
if (nRet == MV_OK)
{
cv::Mat dstImga;
dstImga = Convert2Mat(&stImageInfo, pData);
//cv::imshow("image",dstImga);
cv::cvtColor(dstImga,dstImga,cv::COLOR_BGR2RGB);
QImage Qtemp = QImage((const unsigned char*)(dstImga.data), dstImga.cols, dstImga.rows, dstImga.step, QImage::Format_RGB888);
emit sendImageSignal(&Qtemp);
}
else
{
QString text = QString("无图像数据!nRet [%1]").arg(nRet);
qDebug() << text;
free(pData);
pData = NULL;
return;
}
//qDebug()<< "循环取图";
QThread::msleep(500);
qDebug()<<"子线程"<<QThread::currentThread();
}
}