Qt编译MySQL驱动
参考:qt6.5.0MySQL驱动手动编译以及数据库连接详细教程以及注意事项附资源链接_qt编译mysql驱动-CSDN博客
由于MySQL等数据库的client库遵循的协议与GPL不兼容,因此Qt发布时不带有这些驱动,需要自行编译。
在Qt5版本的编译由于使用傻瓜式的qmake,要简单很多:QT出现没有MySQL驱动,手动编译步骤 - nanmi - 博客园 (cnblogs.com)
本文讲解Qt6使用cmake编译的步骤。
下载Qt源码
下载Qt对应版本的源码,注意Qt安装时才能安装对应版本的源码,之后再通过QMaintenance Tool就没有对应版本的源码选项了。
但实测拿相近的低版本源码应急一下还是可以的。
找到数据库驱动部分的源码
找到数据库驱动部分的源码,为了避免污染源码目录,可以将这个 sqldrivers
文件夹复制到其他目录。
注意 sqldrivers
文件夹才是数据库驱动部分的项目根目录,不信可以编译试试,会发现找不到一些Qt自定义的CMake函数。
安装MySQL
安装MySQL后,在安装路径下找到头文件和库文件:
拷贝这两个文件夹到某个路径不含空格和中文的地方,比如我拷贝到了 sqldrivers/mysql
下。
配置CMake
这部分我是怎么知道怎么配置的?就是看项目中的CMakeLists.txt,很容易看懂。
可以用QtCreator打开 sqldrivers
工程,配置三个环境变量,可以在 .cmake.conf
中写(因为这个文件会被顶层 CMakeLists.txt 引入):
然后尝试编译,我这里选的是Release,毕竟谁会去调试库:
即可在生成目录得到驱动的库文件:
(1)查看构建目录位置:
(2)将生成的库文件拷贝 Qt 插件目录:
如果用的是 PySide6,则同理需要拷贝到 PySide6 插件目录:
(3)将 MySQL client驱动库文件拷贝到 Qt 编译工具链根目录,这样以后直接就能用而无需指定库文件路径:
测试功能
新建一个 Qt 项目(控制台项目就行)
CMakeLists.txt 中添加依赖:
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Sql)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Sql)
target_link_libraries(mysql_test
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Sql
)
输入代码测试:
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
int main(int argc, char *argv[])
{
qDebug() << QSqlDatabase::drivers();
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setDatabaseName("harbor");
db.setUserName("root");
db.setPassword("mysql123");
db.setPort(3306);
bool ok = db.open();
if(ok) qInfo() << "OK";
else qFatal() << "Error: " << db.lastError().text();
}
/*
QList("QSQLITE", "QMIMER", "QMARIADB", "QMYSQL", "QODBC", "QPSQL")
OK
*/
常见错误
找不到Qt
如果报错说找不到Qt,则需要按照提示设置一下变量:
Could not find a package configuration file provided by "QT" with any of the following names: Qt6Config.cmake qt6-config.cmake Qt5Config.cmake qt5-config.cmake Add the installation prefix of "QT" to CMAKE_PREFIX_PATH or set "QT_DIR" to a directory containing one of the above files. If "QT" provides a separate development package or SDK, be sure it has been installed.
即在顶层 CMakeLists.txt 中设置 Qt 编译工具链路径:
再次尝试编译,应该就可以了。
路径错误
观察编译输出信息,可以看到错误原因是路径不能有空格和中文:
但是我们前面已经设置了一个不含空格和中文的路径啊?
这就要再去看看CMakeLists.txt:
项目顶层 CMakeLists.txt 中要求的是 QT_FEATURE_sql_mysql
,没写错啊:
但是查看 CMakeCache.txt,可以看到问题出在 Qt 编译工具链使用了 MySQL_INCLUDE_PATH
,这个变量是哪来的?
查看 QtCreator 自带设置的 CMake 变量,可以看到还设置了一个 MySQL_LIBRARY_DEBUG
, 使用的路径是系统中 MySQL 的安装路径:
之前我不小心将前面设置在 .cmake.conf
中的环境变量设置为 MYSQL_INCLUDE_DIR
,打错了,导致使用的 QtCreator 设置的环境变量。
修正即可,记得删除 CMakeCache.txt 再重新编译。
标签:QT,编译,MySQL,驱动,txt,Qt From: https://www.cnblogs.com/3to4/p/18129916