1.配置环境
1.1 Qt和VS2017的环境配置
在VS2017中新建Qt工程,点击工程属性,配置好包含目录和库目录
1.2 在VS的C++属性中配置Halcon的环境
项目--属性--C/C++--常规--附加包含目录--添加/include和/include/halconcpp目录
链接器--常规--附加库目录--添加lib/x64_win64目录
链接器--输入--附加依赖项--添加halcon.lib halconcpp.lib hdevenginecpp.lib
配置动态链接库,将bin/x64_win64里所有的dll文件拷贝到项目
将下图中的.dll文件复制到程序的源码文件夹
在头文件中添加如下代码,就可以使用联合Halcon编程了。
配置附加依赖项(后期在编程过程中可能还会添加其他lib文件名)
可以参考Halcon安装目录下的例子进行编程,关于每一种语言的例子都已包含。
只用Halcon的引擎联合C++编程
新建项目,将下图中的文件复制到项目的源码文件夹下
在halconqt.h头文件中添加如下代码:
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_halconqt.h"
#include "HalconCpp.h"
#include "HDevEngineCpp.h"
#include "my_error_output.h"//Halcon安装目录下例子文件
#include "my_hdevoperatorimpl.h"//Halcon安装目录下例子文件
#include "my_thread_impl.h"//Halcon安装目录下例子文件
using namespace HalconCpp;
using namespace HDevEngineCpp;
class HalconQt : public QMainWindow
{
Q_OBJECT
public:
HalconQt(QWidget *parent = Q_NULLPTR);
~HalconQt();
private:
Ui::HalconQtClass ui;
HTuple winHandle;
HDevEngine myEngine;
MyHDevOperatorImpl *myOperatorImpl;
HDevProgram program;
private slots:
void SelectPro();
void SelectFunc();
void RunSinglePro();
};
在halconqt.cpp源文件中添加如下代码:
#include "halconqt.h"
#include "qfiledialog.h"
HalconQt::HalconQt(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
myOperatorImpl = new MyHDevOperatorImpl();
Hlong windId = (Hlong)ui.gphView_PicShow->winId();
myEngine.SetHDevOperatorImpl(myOperatorImpl);
connect(ui.btn_SelectPro, &QPushButton::clicked, this, &HalconQt::SelectPro);
connect(ui.btn_SelectFunc, &QPushButton::clicked, this, &HalconQt::SelectFunc);
connect(ui.btn_RunSinglePro, &QPushButton::clicked, this, &HalconQt::RunSinglePro);
}
HalconQt::~HalconQt()
{
}
void HalconQt::SelectPro()
{
QString path = QFileDialog::getOpenFileName();
ui.txt_SelectPro->setText(path);
std::string proPath = path.toStdString();
program.LoadProgram(proPath.c_str());
HDevProgramCall programCall = program.Execute();
//HTuple result = programCall.GetCtrlVarTuple("FinArea");
//ui.labl_Result->setText(QString::number(result[0].D()));
}
void HalconQt::SelectFunc()
{
QString path = QFileDialog::getExistingDirectory();
ui.txt_SelectFunc->setText(path);
QByteArray bytePath = path.toLocal8Bit();
const char * funcPath = bytePath.constData();
myEngine.SetProcedurePath(funcPath);
}
void HalconQt::RunSinglePro()
{
QString path = QFileDialog::getOpenFileName();
ui.txt_SingleProPath->setText(path);
QByteArray byteSinglePath = path.toLocal8Bit();
const char * singleProPath = byteSinglePath.constData();
HDevProgram singleProgram;
singleProgram.LoadProgram(singleProPath);
HDevProgramCall singleProgramCall = singleProgram.Execute();
}
参考:(455条消息) Halcon联合C++(QT)编程_qq_20792765的博客-CSDN博客_halcon联合c++