1. 环境背景
- win10 64位系统
- qt开发工具: qt-windows-opensource-5.1.1-msvc2010_opengl-x86-offline.exe (注:安装的时候一定要安装源码)
- qt插件: qt-vs-addin-1.2.3-opensource.exe
- vs开发工具: VS2010UltimTrial.iso
- vs补丁包: cn_visual_studio_2010_sp1_x86_x64_dvd_651704.iso
- 数据库: mysql-5.5.21-win32.msi (数据库的安装百度很多)
2. 注意事项
- mysql一定要和qt位数相同,比如这里mysql是32位的(win32),qt对应的也是32位(x86)
- qt安装包一定要带源码的版本,要安装源码,不然没有mysql.pro文件就无法编译了
- 这里所有的图片演示的都是msvc 32位编译器的效果,关于mingw 32编译器效果没有实践过,可能会有出入
3. 问题描述
- qt中获取所支持的数据库驱动,发现没有QMYSQL数据库,所以加载QMYSQL数据库失败
- QSqlDatabase: QMYSQL driver not loaded
- QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
4. 编译
4.1 编译前期准备
以下步骤均以我安装qt和数据库的目录做为示例,如果自己安装路径不同,请注意更改相关目录路径。
-
拷贝libmysql.dll 和libmysql.lib两个库
在mysql数据库安装的目录下,拷贝C:\Program Files (x86)\MySQL\MySQL Server 5.5\lib文件夹下的libmysql.dll 和libmysql.lib文件,拷贝到qt安装源码所在目录C:\Qt\Qt5.1.1\5.1.1\Src\qtbase\src\plugins\sqldrivers\mysql文件夹下,(说明:qt版本不同,目录可能会有点差别)
-
编辑qt源码目录下的mysql.pro文件
文件在C:\Qt\Qt5.1.1\5.1.1\Src\qtbase\src\plugins\sqldrivers\mysql文件夹下,用notepad++或者记事本等打开该文件,在文件中两行:
INCLUDEPATH += “C:/Program Files (x86)/MySQL/MySQL Server 5.5/include”
LIBS += “C:/Program Files (x86)/MySQL/MySQL Server 5.5/lib/libmysql.lib”
记得保存后退出。
注意:如果使用的是mingw-32编译器,则静态库连接需改成如下:
LIBS += “C:/Program Files (x86)/MySQL/MySQL Server 5.5/lib/ -llibmysql”
4.2 编译过程
- 以管理员权限运行qt自带的控制台窗口
这里qt版本不同,可能自带的控制台名字不一样
2. cd到qt源码目录的mysql下
这里是切换到C:\Qt\Qt5.1.1\5.1.1\Src\qtbase\src\plugins\sqldrivers\mysql
- 执行qmake
执行后,会在C:\Qt\Qt5.1.1\5.1.1\Src\qtbase\src\plugins\sqldrivers\mysql路径下生成一些新的编译过程的文件
注意:这里如果是mingw-32编译器,则不需要关闭qt控制台窗口,请跳到第6点查看注意事项
- 以管理员权限运行vs2010命令提示符窗口(Visual Studio Command Prompt(2010))
-
cd到qt源码目录的mysql下
这里是切换到C:\Qt\Qt5.1.1\5.1.1\Src\qtbase\src\plugins\sqldrivers\mysql
-
执行nmake或者nmake release
命令介绍
命令 | 作用 |
---|---|
nmake | 编译生成debug和release版本的mysql驱动文件,qsqlmysql.dll和qsqlmysql.lib是release版本的,qsqlmysqld.dll和qsqlmysqld.lib是debug版本的 |
nmake release | 编译生成release版本的mysql驱动文件,即qsqlmysql.dll和qsqlmysql.lib |
执行后会在qt源码安装目录C:\Qt\Qt5.1.1\5.1.1\Src\qtbase\plugins\sqldrivers文件夹下生成对应的驱动文件
注意:我这里使用的是msvc 32位编译器,如果使用的mingw-32编译器,则在上述第3点qmake结束后,不用退出qt控制台窗口,接着输入mingw-32 make或者make即可,生成的是.dll和.a文件,这里具体我也没测试过,参考的百度这篇文章
5. 使用前准备
-
将上述生成的文件qsqlmysqld.dll、qsqlmysqld.lib、qsqlmysql.dll和qsqlmysql.lib驱动文件都拷贝到qt的C:\Qt\Qt5.1.1\5.1.1\msvc2010_opengl\plugins\sqldrivers文件夹下
-
另外拷贝一份C:\Program Files (x86)\MySQL\MySQL Server 5.5\lib文件夹下的libmysql.dll到C:\Qt\Qt5.1.1\5.1.1\msvc2010_opengl\bin文件夹下。
6. 测试
写个qt控制台程序,测试mysql数据库是否可以正常连接