目录
[5.Qt6 编译步骤(CMake 方式)](#5.Qt6 编译步骤(CMake 方式))
1.简介
之前讲了Qt中数据库部分的整体设计,分三层架构 设计,今天需要编译的数据库驱动是位于驱动适配层。
2.前置准备
1.安装 Qt 及源码
- 通过 Qt Maintenance Tool 安装对应版本 Qt,必须勾选 Sources 组件(驱动源码在其中)
- 安装匹配的编译器(MinGW/MSVC for Windows,GCC for Linux)
2.获取 MySQL 客户端库
- Windows:下载MySQL Connector/C,解压到无空格路径(如
C:\mysql-connector-c) - Linux:通过包管理器安装
libmysqlclient-dev(Debian/Ubuntu)或mysql-connector-odbc(CentOS)
3.安装 DM8 达梦数据库,拿到这两个目录
- 头文件:
dmdbms/include - 库文件:
dmdbms/lib64(64 位)
4.环境匹配
- 确保 Qt、编译器、MySQL 库架构一致(均为 32 位或 64 位)
- 将 MySQL 的 bin 目录添加到系统 PATH 环境变量
3.mysql数据库驱动编译
3.1.Windows平台编译
1.切换到Qt的mysql驱动源码目录(以Qt5.15.2为例):
.\Qt\Qt5.15.2\5.15.2\Src\qtbase\src\plugins\sqldrivers\mysql
(路径根据实际安装位置调整)
2.修改 mysql.pro 配置
mysql的库文件不分Debug和Release版本

cpp
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)
INCLUDEPATH += G:/ThirdParty/MySQL/Windows/include
LIBS += -LG:/ThirdParty/MySQL/Windows/lib/x64-Release -llibmysql
DESTDIR = $$PWD/libdriver
3.修改这个目录上级目录的qsqldriverbase.pri

屏蔽这一行:

4.执行 qmake 生成 Makefile
cpp
qmake mysql.pro
(若有多个 Qt 版本,使用完整路径 qmake,如D:\Qt\5.15.2\mingw81_64\bin\qmake.exe)
5.从vs2022的命令行进入执行nmake

最后在libdirver目录下生成了mysql数据库驱动文件:
cpp
qsqlmysql.dll
qsqlmysql.lib
qsqlmysql.pdb
qsqlmysqld.dll
qsqlmysqld.lib
qsqlmysqld.pdb
6.安装驱动
- 编译生成的
qsqlmysql.dll和qsqlmysqld.dll在libdriver目录下 - 复制到 Qt 安装目录的插件文件夹:
D:\Qt\5.15.2\mingw81_64\plugins\sqldrivers - 将 MySQL 的
libmysql.dll复制到 Qt 编译器的 bin 目录(如D:\Qt\5.15.2\mingw81_64\bin)
7.测试代码
cpp
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
qDebug() << "Available drivers:" << QSqlDatabase::drivers();
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("test");
db.setUserName("root");
db.setPassword("123456");
if (db.open()) {
qDebug() << "Connected to database successfully!";
QSqlQuery query;
query.exec("SELECT VERSION()");
if (query.next()) {
qDebug() << "MySQL version:" << query.value(0).toString();
}
db.close();
} else {
qDebug() << "Database connection failed:" << db.lastError().text();
}
return a.exec();
}
(在.pro 文件中添加 QT += sql)
3.2.Linux平台编译
与Windows平台的编译步骤差不多,在细节稍微有点差别:
1.修改 mysql.pro 配置
cpp
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)
INCLUDEPATH += /home/zdxiao/dev/mysql/include
LIBS += -L/home/zdxiao/dev/mysql/lib/x64-Release -lmysqlclient
DESTDIR = $$PWD/libdriver
2.执行 qmake和make
cpp
qmake mysql.pro
sudo make
sudo make install # 自动安装到Qt插件目录
4.达梦数据库驱动编译
4.1.Windows平台编译
cpp
TARGET = qsqldm
HEADERS += $$PWD/qsql_dm_p.h
SOURCES += $$PWD/qsql_dm.cpp $$PWD/main.cpp
#QMAKE_USE += dm
QMAKE_LFLAGS += C:\dm7_20210303_x86_win_32\source\include\dmdpi.lib
INCLUDEPATH += C:\dm7_20210303_x86_win_32\source\include
LIBPATH += C:\dm7_20210303_x86_win_32\source\include
OTHER_FILES += dm.json
include($$PWD/qsql_dm.pri)
PLUGIN_CLASS_NAME = QDMDriverPlugin
include(../qsqldriverbase.pri)
DESTDIR = $$PWD/libdriver
其它的与mysql的Windows平台驱动编译差不多;还有驱动安装稍有点差别,达梦是把C:\dmdbms\bin\dmdpi.dll复制到你的 exe 运行目录 或 Qt 的 bin 目录。还有把dmdpi.dll的依赖库要一起放到exe的运行目录:
cpp
dmcalc.dll
dmcfg.dll
dmclientlex.dll
dmcomm.dll
dmcpr.dll
dmcvt.dll
dmcyt.dll
dmdpi.dll
dmdta.dll
dmelog.dll
dmmem.dll
dmmout.dll
dmos.dll
dmstrt.dll
dmutl.dll
用上面的测试代码通过"QDM"名称把达梦数据库加载起来,经过验证测试OK。
4.2.Linux平台编译
与mysql在linux平台的数据库驱动编译差不多,就不在这里赘述了。
5.Qt6 编译步骤(CMake 方式)
5.1.mysql
1.创建构建目录
cpp
cd ~/Qt/6.9.3/Src/qtbase/src/plugins/sqldrivers
mkdir build-mysql
cd build-mysql
2.执行 CMake 配置
cpp
# Windows MSVC
cmake -G "Visual Studio 17 2022" -A x64 -DFEATURE_sql_mysql=ON -DMySQL_INCLUDE_DIR="C:/mysql-connector-c/include" -DMySQL_LIBRARY="C:/mysql-connector-c/lib/libmysql.lib" -DCMAKE_INSTALL_PREFIX="D:/Qt/6.9.3/msvc2022_64" ..
# Linux
~/Qt/6.9.3/gcc_64/bin/qt-cmake -G Ninja -DFEATURE_sql_mysql=ON -DMySQL_ROOT="/usr/bin/mariadb" -DCMAKE_INSTALL_PREFIX="~/Qt/6.9.3/gcc_64" ..
(根据实际路径调整参数)
3.编译并安装
cpp
cmake --build . --target install --config Release
(Windows MSVC 可添加 --config Debug 编译调试版本)
5.2.达梦数据库
cpp
cd D:\Qt\6.5.3\Src\qtbase\src\plugins\sqldrivers
mkdir build-dm
cd build-dm
cmake .. -G "Visual Studio 17 2022" -A x64 ^
-DFEATURE_sql_mysql=ON ^
-DMySQL_INCLUDE_DIR="C:/dmdbms/include" ^
-DMySQL_LIBRARY="C:/dmdbms/lib64/dmdpi.lib" ^
-DCMAKE_INSTALL_PREFIX="D:/Qt/6.5.3/msvc2022_64"
cmake --build . --config Release --target install