QT编译MySQL驱动教程(Windows/Linux)

1. 基础环境

  • QT 任意版本,需添加源码组件
  • Windows平台,下载MySQL Server,需选择一致的版本,不要求安装,仅用到头文件和库文件
  • Linux平台,可在线安装mysql开发工具包,包含有头文件和库文件
bash 复制代码
sudo apt install libmysqlclient-dev

有些教程用的是MySQL Connector/C工具包中的动态库来构建的,但经测试发现无法解决ssl的问题,不推荐

2. 路径确认

参考并确定以下路径

Windows平台

  • QT的安装路径:D:\Dev\Qt5

  • MySQL头文件路径:D:\Dev\MySQL84\include

  • MySQL库文件路径:D:\Dev\MySQL84\lib

  • QT的MySQL驱动源码路径:D:\Dev\Qt5\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql
    Linux平台

  • QT的安装路径:/home/user/Qt5.14.2/

  • MySQL头文件路径:/usr/local/include/mysql/

  • MySQL库文件路径:/usr/lib/x86_64-linux-gnu/

  • QT的MySQL驱动源码路径:/home/user/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/mysql/

3. 修改项目配置

用QtCreator打开MySQL源码路径下的mysql.pro文件,选择对应的工具链

修改mysql.pro和qsqldriverbase.pri两个项目文件配置

bash 复制代码
TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

# 1、注释该行
# QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)

# 2、添加MySQL动态库路径
# Window平台
INCLUDEPATH +="D:\Dev\MySQL84\include"
LIBS += -L"D:\Dev\MySQL84\lib" -lmysql
#Linux平台
#INCLUDEPATH +="/usr/include/mysql/"
#LIBS += -L"/usr/lib/x86_64-linux-gnu/" -lmysqlclient

# 3、编译到指定路径
DESTDIR = $$PWD/libdirver
bash 复制代码
QT  = core core-private sql-private

# For QMAKE_USE in the parent projects.
# 1、注释该行
# include($$shadowed($$PWD)/qtsqldrivers-config.pri)
# 2、添加该行
include(./configure.pri)

PLUGIN_TYPE = sqldrivers
load(qt_plugin)

DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

4. 构建生成库文件

执行构建,完成构建后,右键.pro文件打开mysql驱动源码同级目录,在libdirver下查看确认库文件

Windows平台

Linux平台

linux平台报错问题

原因是权限不足,只需要在控制台使用管理员权限启动qtcreator即可(生成的库文件权限属于root用户)

bash 复制代码
sudo /home/user/Qt5.14.2/Tools/QtCreator/bin/qtcreator

5. 拷贝库文件

将libdirver/下编译生成的库文件拷贝至QT对应编译工具链的/plugins/sqldrivers文件夹下

Windows平台下:D:/Dev/Qt5/5.14.2/mingw73_64/plugins/sqldrivers/
Linux平台下:/home/user/Qt5.14.2/5.14.2/gcc_64/plugins/sqldrivers/

在Windows平台下,还需要将MySQL Server安装目录下的lib/libmysql.dll拷贝至QT对应编译工具链的\bin\下

而在Linux平台下,/usr/lib/x86_64-linux-gnu/包含在在系统环境路径中可被QT搜索到,所以不需要额外操作

Windows平台下:D:/Dev/Qt5/5.14.2/mingw73_64/bin/libmysql.dll

6. 测试

新建控制台项目(需选择相同的编译工具链),在.pro项目配置文件中添加sql项

bash 复制代码
QT += sql

运行代码

cpp 复制代码
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 打印 Qt 支持的所有数据库驱动
    qDebug() << QSqlDatabase::drivers();
    // 测试连接 MySQL(替换为你的 MySQL 账号密码)
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("test"); // 替换为你的数据库名
    db.setUserName("root");     // 替换为你的 MySQL 用户名
    db.setPassword("123456");   // 替换为你的 MySQL 密码
    db.setPort(3306);

    if (db.open()) {
        qDebug() << "MySQL connection success!";
        db.close();
    } else {
        qDebug() << "MySQL connection failed:" << db.lastError().text();
    }

    return a.exec();
}
相关推荐
龙石数据5 小时前
MySQL 全量同步到 Hive 怎么做?三步配置教程
数据库·hive·mysql·数据治理·数据中台
love530love6 小时前
用自然语言让 AI Agent 卸载软件 —— 以卸载 Visual Studio 2026 为例
ide·人工智能·windows·agent·visual studio·ai agent·marvis
Yang_jie_036 小时前
笔记:数据结构(顺序表)
数据结构·windows·笔记
白露与泡影9 小时前
慢 SQL 不一定是 SQL 慢:一次 MySQL 连接池耗尽的故障定位
数据库·sql·mysql
m0_587098999 小时前
Qt,二进制文件读写建议
开发语言·qt
秋田君10 小时前
QT_QT信号与槽机制
开发语言·数据库·qt
辞旧 lekkk10 小时前
【Qt】 系统相关:事件与定时器
开发语言·qt·学习·萌新
HAPPY酷10 小时前
【ROS2】VMware + Docker 运行 Gazebo 崩溃与“假死”排查实录
qt·docker·容器
三十岁老牛再出发10 小时前
07.07.每日总结
c语言·windows·python
还是鼠鼠11 小时前
AI掘金头条新闻系统 (Toutiao News)-缓存相关推荐新闻
后端·python·mysql·fastapi·web