在Qt新建Demo_HalconAshing_Qt Mainwidow项目。
以下列出代码:
.pro文件:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Demo_HalconAshing_Qt
TEMPLATE = app
macx {
QMAKE_CXXFLAGS += -F/Library/Frameworks
QMAKE_LFLAGS += -F/Library/Frameworks
LIBS += -framework HALCONCpp
}
else {
#defines
win32:DEFINES += WIN32
#includes
INCLUDEPATH += "$$(HALCONROOT)/include"
INCLUDEPATH += "$$(HALCONROOT)/include/halconcpp"
#libs
QMAKE_LIBDIR += "$$(HALCONROOT)/lib/$$(HALCONARCH)"
unix:LIBS += -lhalconcpp -lhalcon -lXext -lX11 -ldl -lpthread
win32:LIBS += "$$(HALCONROOT)/lib/$$(HALCONARCH)/halconcpp.lib" \
"$$(HALCONROOT)/lib/$$(HALCONARCH)/halcon.lib"
}
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
mainwindow.h文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
Mainwindow.cpp文件:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "Halcon/Include/halconcpp/HalconCpp.h"
#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>
using namespace HalconCpp;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QString filename;
filename=QFileDialog::getOpenFileName(this, tr("Choose image"), "", tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));
if(filename.isEmpty()) {
return;
} else {
QImage* img=new QImage;
if(! ( img->load(filename) ) ) { //load image
QMessageBox::information(this, tr("Open image fail"), tr("Open image fail!"));
delete img;
return;
}
ui->label->setPixmap(QPixmap::fromImage(*img));
}
ui->label->setScaledContents(true);
HObject mainImage;
HTuple m_hWindowID;
ReadImage(&mainImage, filename.toStdString().c_str());
HTuple mainWndID;
mainWndID = (Hlong)ui->label_2->winId();
QString s_hWindowID = QString::fromStdString(m_hWindowID.ToString().Text());
if (s_hWindowID == "[]")
{
OpenWindow(0, 0, ui->label_2->width(), ui->label_2->height(), mainWndID, "visible", "", &m_hWindowID);
}
HDevWindowStack::Push(m_hWindowID);
HTuple srcImageHeight, srcImageWidth;
GetImageSize(mainImage, &srcImageWidth, &srcImageHeight);
Rgb1ToGray(mainImage, &mainImage);
SetPart(m_hWindowID, 0, 0, srcImageHeight.I(), srcImageWidth.I());
DispObj(mainImage, m_hWindowID);
}
MainWindow::~MainWindow()
{
delete ui;
}
窗口控件:
主要使用两个label,一个控件名称为label1,用于直接显示图片,另一个为Label2,用于使用halcon方法显示图片。
显示效果如下: