基本思想就是将Qt提供的MySQL驱动编译源码拿出来通过新建库项目的方式进行再编译。具体可分为五个步骤。
1 新建Library项目
1)打开Qt Creator,点击“文件”->“新建文件或项目”。
2)在出现的对话框中,左边“项目”栏选择“Library”,然后在中间栏中选择“C++库”;点击“Choose…”按钮,进入Location选项界面。
3)类型下拉框中选择“Qt Plugin”,这里命名为qsqlmysql,并设定好“创建路径”;点击“下一步”进入Kits选项界面。
4)选择编译器套件,我这里有三个可选项:“Desktop Qt 5.12.4 MSVC2017 64bit”、“Desktop Qt 5.12.4 MinGW 32-bit”、“Desktop Qt 5.12.4 MinGW 64-bit”。我采用套件“Desktop Qt 5.12.4 MSVC2017 64bit”,它包含Microsoft Visual C++Compiler 15.0(amd64)编译器、CDB的Debugger;点击“下一步”进入类名称和文件名称命名界面。
5)基类下拉框中选择“SqlDriverPlugin”,类名为QMYSQLDriverPlugin(必须是这个名称);
点击“下一步”,进入下一个界面,点击“完成”,即完成项目的创建。
2 复制源码文件到新建项目qsqlmysql目录下
复制过后项目目录下的文件结构如下图所示:
1)找到目录D:\programFiles\Qt5.12.4\5.12.4\Src\qtbase\src\plugins\sqldrivers\mysql,
其中D:\programFiles\Qt5.12.4为Qt的安装目录。
2)复制文件qsql_mysql_p.h、qsql_mysql.cpp到项目qsqlmysql目录下,并通过右键菜单“添加现有文件”将它们加载到项目里。
3)将文件mysql.json的内容全部复制粘贴覆盖掉项目qsqlmysql目录下的qsqlmysql.json文件。
3 编辑项目文件qsqlmysql.pro
文件最终的内容如下:
#-------------------------------------------------
#
# Project created by QtCreator 2019-06-20T16:17:40
#
#-------------------------------------------------
QT += core sql-private
win32:CONFIG(release, debug|release): TARGET = qsqlmysql
else:win32:CONFIG(debug, debug|release): TARGET = qsqlmysqld
TEMPLATE = lib
CONFIG += plugin
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
qmysqldriverplugin.cpp \
qsql_mysql.cpp
HEADERS += \
qmysqldriverplugin.h \
qsql_mysql_p.h
DISTFILES += qsqlmysql.json
unix {
target.path = $$[QT_INSTALL_PLUGINS]/sqldrivers
INSTALLS += target
}
# MySQL Server's header folder and lib folder
win32: LIBS += -LF:/mysql/lib/ -llibmysql
INCLUDEPATH += F:/mysql/include
DEPENDPATH += F:/mysql/include
4、修改类文件qmysqldriverplugin.cpp
文件最终的内容如下:
#include "qmysqldriverplugin.h"
#include <qstringlist.h>
#include "qsql_mysql_p.h"
QMYSQLDriverPlugin::QMYSQLDriverPlugin(QObject *parent) :
QSqlDriverPlugin(parent)
{
}
QSqlDriver *QMYSQLDriverPlugin::create(const QString &name)
{
if (name == QLatin1String("QMYSQL") || name == QLatin1String("QMYSQL3")) {
QMYSQLDriver* driver = new QMYSQLDriver();
return driver;
}
return 0;
}
5 编译
最后通过Qt Creator正常的编译即可得到qsqlmysqld.dll以及qsqlmysql.dll。