qt中使用halcon,新版本qt添加mysql驱动

1、qt中使用halcon:
(1)halcon配置:

首先要安装好halcon,然后找到halcon的安装目录,直接右击halcon打开文件夹位置,我的目录是C:\Program Files\MVTec\HALCON-19.05-Progress

halcon目录下的include文件夹和lib文件夹复制到qt项目路径:
在这里插入图片描述
然后在.pro文件中配置includelib路径:

#--------------halcon--------------
INCLUDEPATH += $$PWD/include
INCLUDEPATH += $$PWD/include/halconcpp

LIBS += $$PWD/lib/x64-win64/halcon.lib
LIBS += $$PWD/lib/x64-win64/halconc.lib
LIBS += $$PWD/lib/x64-win64/halconcpp.lib
LIBS += $$PWD/lib/x64-win64/halconcppxl.lib
LIBS += $$PWD/lib/x64-win64/halconcxl.lib
LIBS += $$PWD/lib/x64-win64/halconxl.lib
LIBS += $$PWD/lib/x64-win64/hdevenginecpp.lib
LIBS += $$PWD/lib/x64-win64/hdevenginecppxl.lib
LIBS += $$PWD/lib/x64-win64/libiomp5md.lib
#----------------------------------

注意上面的lib文件要根据自己lib文件夹中的文件来,不同版本halcon lib文件夹中的文件是不同的。

halcon文件夹的bin文件夹中的halcon.dllhalconcpp.dll文件复制到项目生成的debug文件夹中。关于这点,我不是很清楚,之前使用的时候,没有复制dll会报错提示缺少这两个链接库,但是后来用的时候即使没有复制这两个dll也没报错,不知道是不是跟某些函数有关,也可能是我添加了halcon环境变量,我没复制过去也能根据环境变量找到这两个dll吧。最好还是复制一下吧。

(2)测试:

mianwindow.h中头部添加:

#include "HalconCpp.h"
#include "HDevThread.h"
using namespace HalconCpp;

mainwindow.h中添加:

public:
    HObject  ho_Image, ho_Region, ho_ConnectedRegions;
    HObject  ho_SelectedRegions;
    HTuple  hv_Width, hv_Height, hv_WindowID;
//除此之外,还要添加一个按钮来触发
public slots:
    void on_pushButton_clicked();

mainwindow.cpp中添加按钮槽函数:
(代码参考自:http://blog.sina.com.cn/s/blog_13153455f0102uwb5.html)

//halcon测试
void MainWindow::on_pushButton_clicked(){
    ReadImage(&ho_Image, "C:/Users/Administrator/Pictures/qtback/1.jpg");  //图片路径修改一下
      GetImageSize(ho_Image, &hv_Width, &hv_Height);
     SetWindowAttr("background_color","black");
     OpenWindow(0,0,hv_Width/2,hv_Height/2,0,"","",&hv_WindowID);
      HDevWindowStack::Push(hv_WindowID);
      if (HDevWindowStack::IsOpen())
        DispObj(ho_Image, HDevWindowStack::GetActive());
      Threshold(ho_Image, &ho_Region, 0, 128);
      Connection(ho_Region, &ho_ConnectedRegions);
      SelectShape(ho_ConnectedRegions, &ho_SelectedRegions, "area", "and", 5000, 9000);
      if (HDevWindowStack::IsOpen())
       DispObj(ho_SelectedRegions, HDevWindowStack::GetActive());
}

运行程序,点击按钮:
在这里插入图片描述
发现程序成功运行了。

之前我在qt中使用halcon时,一调用halcon的函数就报错abort() has been called,现在也没搞懂当时是什么原因。当时我弄的环境也比较复杂,qt5.6.332位的,halcon12.0的。后来我是怎么解决的呢,因为当时我用的halcondll是直接安装完的halcon中的文件,没有p j,后来替换成了p j的dll,然后又乱七八糟改了一堆东西,然后程序又莫名其妙可以运行了,实在不解。

(3)halcon窗口结合qt控件使用:

mainwindow.cpp中创建HTuple对象:

HTuple  hv_WindowID;

绑定窗口和控件的winId,我这里使用的是QGraphView,其他控件一样使用:

SetWindowAttr("background_color","black");
OpenWindow(0,0,ui->graphicsView_4->width(),ui->graphicsView_4->height(), 
           (Hlong)ui->graphicsView_4->winId(),"","",&hv_WindowID);

只打开一个就够了,按照上面的设置,窗口会显示黑色。

需要让控件显示halcon对象时,就可以通过访问hv_WindowID就可以了:

HObject hImage;
DispObj(hImage, hv_WindowID);

运行结果:
在这里插入图片描述
由于我这里我是结合海康相机的回调来显示的,相机拍到一团黑色,不要见怪。

2、新版本qt中使用mysql:

参考自:https://blog.csdn.net/qq_39311335/article/details/105874438

旧版本的qt能直接使用mysql,但是新版本qt中不再自带mysql驱动了,所以要自己来生成一下才能用,用了一段时间了,记录一下,免得以后忘了怎么弄的。

使用qtcreater中打开:E:\qt\5.14.1\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro(注意这不是我自己的项目),如果qt中没有Src文件夹,要么在别的文件夹,要么没装。

mysql.pro中修改成下面的代码:

TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql    #这里注释掉
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)

# ---添加---------------------
# 这里根据自己安装mysql的目录来
INCLUDEPATH += "E:/1/mysql-8.0.24-winx64/include"
DEPENDPATH += "E:/1/mysql-8.0.24-winx64/include"
LIBS += "E:/1/mysql-8.0.24-winx64/lib/libmysql.lib"
# ---添加---------------------

点击小锤子或重新构建,构建完成后,安装mysql的盘中会出现一个plugins文件夹,里面包含了生成的mysql驱动:
在这里插入图片描述

把这四个文件放到自己使用的msvcmingw运行库的sql驱动中,如我这里的目录:E:\qt\5.14.1\msvc2015_64\plugins\sqldrivers

然后就是类似sqlite的配置了,在.pro中添加:

QT += sql

mainwindow.h中:

#include <QSqlDatabase>

mainwindow.cpp中添加:

//输出支持的sql驱动
qDebug()<<"available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
   qDebug()<<driver;

QSqlDatabase data_base2 = QSqlDatabase::addDatabase("QMYSQL");

就不会提示无法加载mysql了。
在这里插入图片描述
连接本地的mysql时,通过ip + 端口 + 数据库名 来连接:

database = QSqlDatabase::addDatabase("QMYSQL");     //用户名:root   //密码:root
database.setHostName("localhost");  //设置主机地址
database.setPort(3306);  //设置端口 默认3306
database.setDatabaseName("mydatabase");  //设置数据库名称
database.setUserName("root");  //对应数据库的用户名
database.setPassword("root");//对应数据库的密码
if(!database.open())
    emit sendLog(u8"数据库未能连接"),
    qDebug()<<u8"数据库未能连接";
 else
    qDebug()<<u8"成功连接";

mysqlqt中的使用方法和sqlite差不多,也是通过QSqlQuery来执行语句的,如:

    QSqlQuery sql_query;
    //插入数据
    if(!sql_query.exec( QString("insert into serialNumber values('%1', '%2','%3','%4','%5')").arg(str1).arg(str2).arg(str3).arg(str4).arg(str5)))
    {
       qDebug() << sql_query.lastError();
       }
    else
    {
       qDebug() << "inserted serialNumber!";
       }

有一点要注意的是,在使用时我发现mysql打开的比sqlite要慢的。之前使用sqlite时,我习惯是打开数据库,查询/插入,然后再关闭数据库。但是在mysql中使用这一流程时遇到了问题,每次点击按钮打开数据库,然后查询,然后再关闭数据库,这一过程能用到1秒钟左右,也就是我点击按钮,到显示数据中间要卡顿个1秒左右才显示,所以在后来的使用中,我基本都是在初始化的时候打开数据库,在析构函数中关闭数据库。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值