新手使用qt6 编译mysql驱动的坑
特别提示,想省时跳过下面1,2,因为这是按网上找的教程,但qt6编译驱动的步骤不一样了,直接从第4看吧。
- 连接mysql数据库,必须自行使用源代码编译生成mysql驱动文件,安装qt时必须勾选source,源代码在C:\Qt\6.8.2\Src\qtbase\src\plugins\sqldrivers\mysql目录,打印发现少了很多文件,如mysql.pro等
,只能百度自己创建一个mysql文件。
- qsql_mysql.cpp文件引用的h头文件路径很多不对,一般mysql引用的h头文件在三个目录:QtSql,QtCode,private,最神奇就是private一时找不到,结果发现在 6.8.2\msvc2022_64\include\QtSql\6.8.2\QtSql\private,路径很奇怪
- 上面所有头文件梳理完,再构建,又提示: error: C2065: “MYSQL_OPT_SS: 未声明的标识符,经查因为mysql数据库版本太旧?我使用的5.1的,只能下载个新版mysql8,安装好后配置lib和include目录(只需要这两目录,其它安装mysql的电脑复制过来也可以),又有错误提示:“QMYSQLDriver::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义,算了,改不动了,我还是直接去下载个源码来编译吧,https://download.qt.io/archive/qt/6.8/6.8.2/submodules/,找到qtbase-everywhere-src-6.8.2.zip
- 单独复制mysql的lib和include两文件夹到一个英文文件夹里,并且路径不要有空格(听劝就对)
- 编辑C:\Qt\6.8.2\Src\qtbase\src\plugins\sqldrivers\.cmake.conf,添加SET(FEATURE_sql_mysql ON)
SET(MySQL_INCLUDE_DIR "D:/MySQL8/include")
SET(MySQL_LIBRARY "D:/MySQL8/lib/libmysql.lib") - 用QTCreator打开文件C:\Qt\6.8.2\Src\qtbase\src\plugins\sqldrivers\CMakeLists.txt。
- 打开后,第一步就过不去了,提示No suitable kits found,但是我已安装好desktop QT 6.8.2 MinGW 64 bit和MSVC2022 64 bit。
- 鼠标放在左边有感叹号的套件上,提示少了cmake,在qt根目录下运行MaintenanceTool.exe,安装上cmake和ninja,然后 管理构建套件 里,点击套件,在下方的 cmake tool里选上cmake,应用后就可以了。
- 终于进入到构建程序阶段,又又又有问题,构建提示: error: 'MYSQL_OPT_SSL_KEY' was not declared in this scope;等9点相似的错误,经查是因为mysql数据库太旧(用的5.1),改成mysql8,编译通过,生成的文件在C:\Qt\6.8.2\Src\qtbase\src\plugins\sqldrivers\build\Desktop_Qt_6_8_2_MinGW_64_bit-Debug\plugins\sqldrivers目录下
- 但这是mingw,而我的项目是使用msvc(项目中用到webengineview,必须要求msvc),切换到msvc后又出错了,无法正确加载项目:
很好很QT,
- 顺带一个解决编译输出这些地方中文乱码问题:1.在cmd里输入chcp 65001,设置为utf-8格式,2.项目->管理构建套件->环境->interface->语言,从下拉菜单中选择chinese(china),重启qtcreator就可以看到中文了