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 小时前
Qt——5、Qt系统相关
开发语言·qt·客户端开发
呉師傅6 小时前
【使用技巧】Adobe Photoshop 2024调整缩放与布局125%后出现点菜单项漂移问题的简单处理
运维·服务器·windows·adobe·电脑·photoshop
牵牛老人7 小时前
【Qt 开发后台服务避坑指南:从库存管理系统开发出现的问题来看后台开发常见问题与解决方案】
开发语言·qt·系统架构
那个村的李富贵7 小时前
解锁CANN仓库核心能力:50行代码搭建国产化AIGC图片风格迁移神器
mysql·信息可视化·aigc·cann
梦帮科技8 小时前
OpenClaw 桥接调用 Windows MCP:打造你的 AI 桌面自动化助手
人工智能·windows·自动化
xmRao8 小时前
Qt+FFmpeg 实现 PCM 音频转 AAC 编码
qt·ffmpeg·pcm
xmRao8 小时前
Qt+FFmpeg 实现录音程序(pcm转wav)
qt·ffmpeg
喜欢喝果茶.8 小时前
QOverload<参数列表>::of(&函数名)信号槽
开发语言·qt
wjhx9 小时前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
踏过山河,踏过海9 小时前
【qt-查看对应的依赖的一种方法】
qt·visual studio