知方号

知方号

QT学习笔记

QT学习笔记

QT学习笔记-QT安装postgresql驱动 0、背景1、环境以及条件说明2、编译驱动3、让QT的程序能找到编译好的驱动4、复制依赖的数据库动态库5、访问数据库运行成功6、关于QT使用MSVC构建套件访问postgresql的问题

0、背景

在使用QT开发应用的过程中,往往会把应用使用过程中产生的数据放入数据库进行统一存储,因此通过QT实现数据库的访问可以说是必须的一个知识点,起始QT访问数据库的语法及相关类和方法的使用并不复杂,但是对于使用QT的新人来说往往会开在数据库驱动加载的地方,比如遇到以下问题:

QSqlDatabase: QPSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMARIADB QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

虽然QT的驱动列表中有QPSQL,但是确保不能加载。下面就来说一下正确使用QT方法数据的驱动问题。

QT最新的安装包安装完毕后,默认支持ODBC和SQLITE数据库,要想使用其他的数据库那么你在安装QT的时候要把源码选项勾上。

1、环境以及条件说明

操作系统:windows10专业版 数据库版本:Postgresql 14.6(64位)(在编译驱动的时候需要引用这里面的库和头文件,也可以不安装直接下载压缩包解压也行) QT版本:5.15.2,且安装的时候勾选了源码 QT编译套件:MinGW64(关于32位位与64位问题要与数据库一致)

2、编译驱动

我的Postgresql安装目录为:D:pgsql 我的QT安装目录为:D:Qt 对应的数据库驱动源码目录为:D:Qt5.15.2Srcqtbasesrcpluginssqldrivers 如下图: 1、选择对应数据库类型的源码目录:D:Qt5.15.2Srcqtbasesrcpluginssqldriverspsql,然后进入,如下图: 2、用qt creator打开psql.pro工程,如下图: 3、选择64位的编译套件,然后点击“Configure Project”,打开工程代码如下: 4、修改psql.pro工程文件内容,注释掉QMAKE_USE += psql,如下:

TARGET = qsqlpsqlHEADERS += $$PWD/qsql_psql_p.hSOURCES += $$PWD/qsql_psql.cpp $$PWD/main.cpp#QMAKE_USE += psqlOTHER_FILES += psql.jsonPLUGIN_CLASS_NAME = QPSQLDriverPlugininclude(../qsqldriverbase.pri)

5、鼠标右键点击工程psql,在弹出菜单中选择添加库,弹出如下对话框: 6、选择“外部库”,然后点击“下一步”,如下图: 7、点击库文件后的“浏览…”按钮,选择postgresql安装目录下的lib/libpg.lib,包含路径选择postgresql安装目录下的include,取消“为debug版本添加’d’作为后缀”的勾选,如下图: 8、点击“下一步”按钮,如下图: 9、点击“完成”按钮,查看.pro文件的变化如下: 10、修改qsqldriverbase.pri内容,

注释include($$shadowed($$PWD)/qtsqldrivers-config.pri),增加include(./configure.pri),如下: QT = core core-private sql-private# For QMAKE_USE in the parent projects.#include($$shadowed($$PWD)/qtsqldrivers-config.pri)include(./configure.pri)PLUGIN_TYPE = sqldriversload(qt_plugin)DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

11、把项目构建方式改为release,然后鼠标右键点击工程psql,在弹出菜单中选择“构建”或“重新构建”。构建完毕后,如下图: 12、通过分析编译输出的日志,可以分析出,驱动编译完毕生成的dll所在的目录为:D:pluginssqldrivers,如下图: 至此驱动的编译过程就结束了。

3、让QT的程序能找到编译好的驱动

qt工程在编译是默认寻找数据库驱动的路径(注意项目使用的编译套件是MinGw 64位的)是:D:Qt5.15.2mingw81_64pluginssqldrivers,因此需要把上一步编译生成的3个文件libqsqlpsql.a、qsqlpsql.dll、qsqlpsql.dll.debug复制到D:Qt5.15.2mingw81_64pluginssqldrivers目录下。如下图:

4、复制依赖的数据库动态库

1、qt对不同的数据库所依赖的dll的数量不一样,像MySql主要就是依赖1个libmysql.dll,但是对于PostgreSql 14.6依赖的dll包含: 以下为必须

libcrypto-1_1-x64.dlllibiconv-2.dlllibintl-9.dlllibpg.dlllibssl-1_1-x64.dll

以下2个可选

liblz4.dlllibxml2.dll

2、需要把必须的dll从postgresql安装目录下D:/pgsql/bin复制到QT项目的输出目录中,如下图: 3、为了避免每个QT项目都需要复制这几个dll,可以把这几个dll复制到QT编译套件的bin目录下,我的用编译套件为MinGw 64位,对应的目录为D:/Qt/5.15.2/mingw81_64/bin,如下图:

5、访问数据库运行成功

写一个访问postgresql数据库的demo工程,关键代码如下:

void Widget::on_btnDbTest_clicked(){ QStringList driverList = QSqlDatabase::drivers(); qDebug()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。