详情见我另一篇博客配置方法:
QT与Halcon联合编程环境配置【注意事项以及遇到的各种坑】_NCUTer的博客-CSDN博客_qt联合halcon
配置好之后程序构建运行一次,在程序根目录下生成如下文件:
2.QT ui界面构建3.将生成导出的halcon c++代码打开备用,挑选用到的代码放到mainwindow.cpp中
mainwindow.h 代码如下:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include#include #include #include #include using namespace HalconCpp; QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_pushButton_clicked(); //开启相机采集 void on_pushButton_2_clicked(); //关闭相机 void on_pushButton_3_clicked(); //退出程序 void camera(); //相机抓图函数 private: Ui::MainWindow *ui; // Local iconic variables HObject ho_Image; // Local control variables HTuple hv_WindowHandle, hv_AcqHandle, hv_Width; HTuple hv_Height; //定义相机采图的定时器 QTimer *timer; }; #endif // MAINWINDOW_H
mainwindow.cpp 代码如下:
#include "mainwindow.h" #include "ui_mainwindow.h" #includeMainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); timer = new QTimer(this); //定义定时器 connect (timer,&QTimer::timeout,this,[=]() { camera(); }); } MainWindow::~MainWindow() { delete ui; } //打开相机开启采图 void MainWindow::on_pushButton_clicked() { if (HDevWindowStack::IsOpen()) CloseWindow(HDevWindowStack::Pop()); SetWindowAttr("background_color","black"); OpenWindow(0,0,ui->label_singleMain->width (),ui->label_singleMain->height (),(Hlong)ui->label_singleMain->winId(),"visible","",&hv_WindowHandle); HDevWindowStack::Push(hv_WindowHandle); OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1, "false", "default", "00305330d6a1_Basler_acA244020gm", 0, -1, &hv_AcqHandle); timer->start(20); } //关闭相机 void MainWindow::on_pushButton_2_clicked() { timer->stop (); CloseFramegrabber(hv_AcqHandle); QMessageBox::information (this,"Tip Message","相关已关闭成功!"); } //退出程序 void MainWindow::on_pushButton_3_clicked() { exit (0); } //相机定时器抓图配合事件 void MainWindow::camera() { GrabImage(&ho_Image, hv_AcqHandle); GetImageSize(ho_Image, &hv_Width, &hv_Height); if (HDevWindowStack::IsOpen()) SetPart(HDevWindowStack::GetActive(),0, 0, hv_Height-1, hv_Width-1); if (HDevWindowStack::IsOpen()) DispObj(ho_Image, HDevWindowStack::GetActive()); }
===================尤其注意定时器的合理运用问题:
QTimer *timer = new QTimer(this); //定义定时器
connect (timer,&QTimer::timeout,this,[=]()
{
camera();
});
//相机定时器抓图配合事件
void MainWindow::camera()
{
GrabImage(&ho_Image, hv_AcqHandle);
GetImageSize(ho_Image, &hv_Width, &hv_Height);
if (HDevWindowStack::IsOpen())
SetPart(HDevWindowStack::GetActive(),0, 0, hv_Height-1, hv_Width-1);
if (HDevWindowStack::IsOpen())
DispObj(ho_Image, HDevWindowStack::GetActive());
}
//打开相机开启采图
void MainWindow::on_pushButton_clicked()
{
if (HDevWindowStack::IsOpen())
CloseWindow(HDevWindowStack::Pop());
SetWindowAttr("background_color","black");
OpenWindow(0,0,ui->label_singleMain->width (),ui->label_singleMain->height (),(Hlong)ui->label_singleMain->winId(),"visible","",&hv_WindowHandle);
HDevWindowStack::Push(hv_WindowHandle);
OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", -1, "default",
-1, "false", "default", "00305330d6a1_Basler_acA244020gm", 0, -1, &hv_AcqHandle);
timer->start(20);
}
//关闭相机
void MainWindow::on_pushButton_2_clicked()
{
timer->stop ();
CloseFramegrabber(hv_AcqHandle);
QMessageBox::information (this,"Tip Message","相关已关闭成功!");
}
至此程序即可成功运行调用相机进行采图了
我的配置完毕的QT源程序已发布至资源,如需要可自行查看参考【有疑问可评论在此大家一起看看哪里出了问题】:
QT与Halcon联合编程调用相机实时采图--QT_Halcon_CameraGrab.zip-QT文档类资源-CSDN下载



