Halcon联合C++(QT)编程

Halcon联合C++(QT)编程

一、环境配置

1.1 Qt和VS20105的环境配置
在VS2015中新建Qt工程,点击工程属性,配置好包含目录和库目录
在这里插入图片描述
1.2 配置Halcon和C++的环境
点击工程属性,配置附加包含目录。
在这里插入图片描述
配置附加库目录
在这里插入图片描述
配置附加依赖项(后期在编程过程中可能还会添加其他lib文件名)
在这里插入图片描述
将下图中的.dll文件复制到程序的源码文件夹
在这里插入图片描述
在头文件中添加如下代码,就可以使用联合Halcon编程了。
在这里插入图片描述
PS:其实我们可以参考Halcon安装目录下的例子进行编程,关于每一种语言的例子都包含了。
在这里插入图片描述

二、Halcon导成C++代码联合编程

三、直接用Halcon的C++方法联合编程

参考Halcon联合C#编程,两者类似。

四、只用Halcon的引擎联合C++编程

新建项目,将下图中的文件复制到项目的源码文件夹下。
在这里插入图片描述
在HalconUnionaAdd.h文件中添加如下代码:

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_HalconUnionaAdd.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 HalconUnionaAdd : public QMainWindow
{
    Q_OBJECT

public:
    HalconUnionaAdd(QWidget *parent = Q_NULLPTR);
	~HalconUnionaAdd();

private:
    Ui::HalconUnionaAddClass ui;
	HTuple windHandle;
	HDevEngine myEngine;
	MyHDevOperatorImpl *myOperatorImpl;
	HDevProgram program;

	private slots:
	void SelectPro();
	void SelectFunc();
	void RunSinglePro();
};

在HalconUnionaAdd.cpp文件中添加如下代码:

#include "HalconUnionaAdd.h"
#include "qfiledialog.h"

HalconUnionaAdd::HalconUnionaAdd(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, &HalconUnionaAdd::SelectPro);
    connect(ui.btn_SelectFunc, &QPushButton::clicked, this, &HalconUnionaAdd::SelectFunc);
	connect(ui.btn_RunSinglePro, &QPushButton::clicked, this, &HalconUnionaAdd::RunSinglePro);
}

HalconUnionaAdd::~HalconUnionaAdd()
{
	delete myOperatorImpl;
	myOperatorImpl = nullptr;
}

void HalconUnionaAdd::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 HalconUnionaAdd::SelectFunc()
{
	QString path= QFileDialog::getExistingDirectory();
	ui.txt_SelectFunc->setText(path);
	QByteArray bytePath = path.toLocal8Bit();
	const char * funcPath = bytePath.constData();
	myEngine.SetProcedurePath(funcPath);

}

void HalconUnionaAdd::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();


}

点击运行
在这里插入图片描述
单独运行一个程序
在这里插入图片描述
通过外部函数(.hdvp)和程序(.hdev)运行程序
在这里插入图片描述
只是目前还没有办法将运行的窗口绑定到窗体的窗口内,

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值