QT编译链接数据库
注意!:我的方式中发起提前下载好Listary这个搜刮软件
版本信息:
踩了两晚的坑得到下面的总结:
- 找到下面路径的mysq.pro文件,用 QT 打开(也有教程说可以用visual studio的下令行工具打开,这里我认为都用IDEA打开很多报错提示会更加的清晰)
- D:\QT\Installation\5.15.0\Src\qtbase\src\plugins\sqldrivers\mysql #根据自己的QT版本路径做修改 数字后面的内容是固定的
复制代码
打开后修改mysql.pro文件:
在打开mysql.pro之后很多教程是让我们直接进行修改就行了,但是很多人修改后找不到这找不到那的,这里我在编译时做了一个前提操作就是把MinGW和MSVC的编译方式都加上,步骤可能繁琐但是容错率会高很多,原理就不做解释了(着实是我也解释不清)
注意这里的编译设置这很紧张,有些人找不到qsqlmysql.dll.debug的原因可能就是因为这里设置的是MSVC版本的编译选项!,只有MinGW的编译器能编译出qsqlmysql.dll.debug!
这里有人可能会没有这多选项,那可能是你没有装QT的这些版本功能,可以在QT目次下找到MaintenanceTool.exe 然后对应版本下载安装(我直接all in):
如果没做这一步或者忘了,可以在这里进行修改添加:
之后在这里进行灵活切换,切换的目标后面解释,这里以MinGW为例:
然后就可以进进行修改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
- LIBS+="D:/JAVA/MySQL/mysql/lib/libmysql.lib" # 根据自己的mysql路径做修改
- INCLUDEPATH+="D:/JAVA/MySQL/mysql/include" # 根据自己的mysql路径做修改
- # DESTDIR = D:/QT/Installation/5.15.0/Src/qtbase/src/plugins/sqldrivers/mysql/lib
- PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
- include(../qsqldriverbase.pri)
复制代码 DESTDIR:#指定编译后的lib生成路径,这里不知道为什么我的不会被指定到这里就没用,后面说一下我是怎么解决的。
然后就可以进行构建了
构建可能会碰到一个报错说qtsqldrivers-config.pri这个文件找不到,你可以在mysql文件夹同级目次D:\QT\Installation\5.15.0\Src\qtbase\src\plugins\sqldrivers下本身创建一个,并加上下面内容:- QT.sqldrivers.enabled_features =
- QT.sqldrivers.disabled_features =
- QT.sqldrivers.QT_CONFIG =
- QT.sqldrivers.exports =
- QT.sqldrivers_private.enabled_features = sql-sqlite sql-mysql
- QT.sqldrivers_private.disabled_features = sql-db2 sql-ibase sql-oci sql-odbc sql-psql sql-sqlite2 sql-tds system-sqlite
- QT.sqldrivers_private.libraries =
复制代码
- 前面说了有些人可能在mysql.pro中设置了DESTDIR也没用生效,这时间就可以用到提前预备好的Listary软件去搜qsqlmysql.dll(我的是在D:\QT\Installation\5.15.0\mingw81_64\qtbase\src\plugins\sqldrivers\plugins\sqldrivers)
- 可以根据时间排序找到刚刚编译乐成的那个,但肯定要注意,这个应该是你先前选择的编译版本的路径,好比我先用的MinGW这里生成的就在 QT版本的 mingwxxx_64 下,后面使用MSVC编译就会生成在 QT版本的 msvcxxx_64 下(如绿色划线)。注意这里是默认路径,可能会因为版本等原因生成的地方差别,以是我才使用Listary去搜,根据生成时间去锁定总没错,这里为了避免混淆 发起先走一遍MinGW的之后如果不乐成再用MSVC的方式进行处理
- 如果你是做过很多次依然没乐成,此时搜刮搜刮到很多个地方都有有 很乱,我发起可以一个一个的全部删除掉,重新编译再进行下一步,这样方便你理清思绪。
找到之后右击打开到文件夹,把qsqlmysql.dll和qsqlmysql.dll.debug复制黏贴到这个目次下(我的是在 :\QT\Installation\5.15.0\mingw81_64\plugins\sqldrivers)
- 肯定要注意路径选择,我使用MinGW编译的,最后也肯定是要放到MinWG的版本路径下\plugins\sqldrivers
- 有些人会发现本身的生成目次里怎么没有qsqlmysql.dll.debug这个文件,这就要看你之前用QT编译时是不是用的MinGWxx_64版本,使用这个版本默认会生成这两个文件的(不过生成的路径不愿定是这里,但可以通过 Listary 去搜,加上生成时间去锁定)
- 然后就可以去找到你的mysql/lib目次下的libmysql.dll动态库文件,将它黏贴到mingwxx_xx的bin目次下
至此基本就完成了
注意:
- 从始至终我都是在围绕着MinGW,用MinGW去编译,生成的两个文件(只有MinGW能生成qsqlmysql.dll.debug文件)在MinGW下的\qtbase\src\plugins\sqldrivers\plugins\sqldrivers,黏贴到MinGW下的\plugins\sqldrivers 中。最后的动态库也是黏贴到MinGW的bin目次下,整个过程都和最开始的编译设置是强干系的!
- 我是在被逼疯了的情况下两个同时进行的,我不知道单一做个MinGW行不行,在用MinGW编译完成之后我又用MSVC进行了编译,操作方式就是在这里进行切换:
之后的步骤都大同小异,我就不做介绍了,只是有下面几点差别:
- MinGW 路径中的 mingwxx_xx 换成了 msvcxxxx_xx,这里的和你在QT项目里选择的编译器干系。
- 在生成的文件中不在有 qsqlmysql.dll.debug ,取而代之的是多了个qsqlmysqld.dll 但是咱只管能运行,我把所有同一时间和 qsqlmysql.dll(这里是被MSVC版本的编译器编译的!) 一起在一个文件夹下生成文件都黏贴到 msvc2019_64\plugins\sqldrivers 下了。包乐成的!
用QT创建一个qmake的项目,在 *.pro 中添加:- QT += core gui sql
- QT += sql
复制代码 main.cpp- #include "mainwindow.h"
- #include <QApplication>
- #include <QLabel>
- #include <QPushButton>
- #include <QHBoxLayout>
- #include <QSlider>
- #include <QSpinBox>
- #include <QSqlError>
- #include <QDebug>
- #include <QSqlDatabase>
- #include <QMessageBox>
- #include <QTextStream>
- #include <stdio.h>
- bool createConnection()
- {
- QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
- db.setHostName("localhost");
- db.setDatabaseName("qtqq");
- db.setUserName("root");
- db.setPassword("123456");
- db.setPort(3306); //端口
- bool ok = db.open();
- if (ok)
- {
- qDebug() << "连接成功" ;
- }
- else
- {
- qDebug() << "连接失败" ;
- }
- return true;
- }
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- if (!createConnection())
- return 1;
- return a.exec();
- }
复制代码 哦对 可能另有一个问题,就是如果你有多个版本的QT,要注意系统情况中的当期要使用的版本路径的优先级是不是高于其他版本。
👏最后祝各位都能少遇BUG,事事顺遂
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|