第一部分 qtcreator上没有mysql驱动的解决办法
第一步:找到你的qt的版本的源码src
在源码下找到你的mysql
我的在F:\Qt\5.14.1\qt-everywhere-src-5.14.1\qt-everywhere-src-5.14.1\qtbase\src\plugins\sqldrivers\mysql
你的mysql文件应该在…\qtbase\src\plugins\sqldrivers\mysql,前面的路径是你自己将他放在的位置,后边的应该一致
第二步,点击mysql.pro,电脑会自动打开qtcreater,然后就是进行编译器的选择,我选择的是:
当你构建成功后,界面是这样的:
第三步:修改你的mysql.pro
具体内容:
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql
INCLUDEPATH += $$quote("C:\Program Files\MySQL\MySQL Server 8.0\include") #本机mysql的include目录
LIBS += -L$$quote("C:\Program Files\MySQL\MySQL Server 8.0\lib") -lmysql #本机mysql的lib目录
#注:当你去找的你电脑上的mysql路径时,你会发现大概率你的路径和我的路径是一致的,这应该和mysql的安装方式有关吧!
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
#指定这个文件的绝对地址,具体这个路径的位置你可以看下图"qsqldriverbase.pri的路径"
include(F:\Qt\5.14.1\qt-everywhere-src-5.14.1\qt-everywhere-src-5.14.1\qtbase\src\plugins\sqldrivers\qsqldriverbase.pri)
qsqldriverbase.pri的路径:其实很好找,就在mysql文件夹的上级目录中
第四步:然后再修改一下sqldriverbase.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 = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
第五步:构建项目
执行后,F盘下会出现plugins文件夹,进入F:\plugins\sqldrivers中,可以看到qsqlmysql.dll文件;
那么F:\plugins\sqldrivers怎么找呢?
我的qt环境装在F:
而F:\plugins就生成在你的qt环境的同级目录 或者 qt环境的上级目录中
第六步:
将F:\plugins\sqldrivers目录下的qsqlmysql.dll文件复制到F:\Qt\5.14.1\mingw73_64\plugins\sqldrivers
第七步:测试:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QStringList list = QSqlDatabase::drivers();
qDebug() << list;//打印支持的sql驱动
}
MainWindow::~MainWindow()
{
delete ui;
}
我们发现,输出结果中出现了"QMYSQL", “QMYSQL3”,说明:大功告成!
注:我用的是mingw64位,mingw32位不可用,msvc2017_64也不可用
参考:
Qt缺少Mysq驱动QMYSQL driver not loaded
Windows环境下Qt缺少Mysql驱动的问题解决方案
第二部分 vs2019上没有mysql驱动的解决办法
接下来是讲:msvc2017_64没有mysql驱动怎么办?(与第一部分有少许不同)
第一步:找到源码:
如果你是做完第一部分,然后再做第二部分,那你就要把操作过的第一部分的源码删掉 ; 如果你是直接看的第二部分,那就不用删,找到你的源码即可
删除重新解压源码,源码的下载地址:qt源码下载
找到源码
在源码下找到你的mysql
我的在F:\Qt\5.14.1\qt-everywhere-src-5.14.1\qt-everywhere-src-5.14.1\qtbase\src\plugins\sqldrivers\mysql
你的mysql文件应该在…\qtbase\src\plugins\sqldrivers\mysql,前面的路径是你自己将他放在的位置,后边的应该一致
第二步,点击mysql.pro,电脑会自动打开qtcreater,然后就是进行编译器的选择,我选择的是:msvc2017编译器
第三步:修改mysql.pro
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)
#该路径是mysql的头文件路径
INCLUDEPATH += "C:\Program Files\MySQL\MySQL Server 8.0\include"
#这是MySQL的库文件路径/
LIBS += "C:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.lib"
#为了方便查找,不妨增加一条语句,该语句用来指明编译后的结果输出的位置
#所以说,一会编译成功了,我要的文件就在F:\Qt\5.14.1\qt-everywhere-src-5.14.1\qt-everywhere-src-5.14.1\qtbase\src\plugins\sqldrivers\mysql\mysql\lib里面
#你就直接写成一个你知道的路径,一会去那里找就行了(代号:1)
DESTDIR = ../mysql/lib/
第四步:修改qsqldriverbase.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 = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
第五步:修改msvc-version.conf文件
文件路径:
F:\Qt\5.14.1\msvc2017_64\mkspecs\common\msvc-version.conf
在前面加一句QMAKE_MSC_VER = 1909(对应自己的编译器版本,里面会提示的,我是vs2017):
第六步:编译
编译成功之后,
找到F:\Qt\5.14.1\qt-everywhere-src-5.14.1\qt-everywhere-src-5.14.1\qtbase\src\plugins\sqldrivers\mysql\mysql\lib
也就是刚才写的(代号:1)那个路径…/mysql/lib/
再说明一下吧,其实就是"我们正在构建的mysql这个项目"路径下的/mysql/lib/
打开如图:
第七步:
把qsqlmysql.dll和qsqlmysqld.dll复制到F:\Qt\5.14.1\msvc2017_64\plugins\sqldrivers下,并且把mysql的lib目录下的libmysql.dll复制到F:\Qt\5.14.1\msvc2017_64\bin下就可以运行了。
第八步:测试
#include "DBTest_msvc2017_64.h"
#include <QSqlDatabase>
#include <QDebug>
DBTest_msvc2017_64::DBTest_msvc2017_64(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QStringList list = QSqlDatabase::drivers();
qDebug() << list;//打印支持的sql驱动
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("数据库名称"); // 数据库名称
db.setHostName("主机名"); // 主机名
db.setUserName("数据库,用户名"); // 数据库,用户名
db.setPassword("数据库,密码"); // 数据库,密码
db.setPort(3306); // 数据库,端口
}
DBTest_msvc2017_64::~DBTest_msvc2017_64()
{}
ok!大工告成!
参考:
Qt连接MySQL数据驱动(绝对有效)
Qt缺少Mysq驱动QMYSQL driver not loaded