Qt跨平台,MySQL开源、体积小。如果需要开发具备“数据共享”功能的软件,那Qt、MySQL的结合无疑是一个很优秀的选择,而且Qt官方提供的数据库类支持MySQL。下面就来讲讲Qt、MySQL的环境搭建。
前些日子和一个师弟聊天刚好就聊到这个话题,他想用Qt、MySQL开发一个软件作为毕业设计,但是同时安装了Qt和MySQL却用访问不了MySQL,不得不将MySQL换成SQLite。
“同时安装了Qt和MySQL,但是却访问不了MySQL”总体分为以下2个原因:
①无QMYSQL驱动
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3
②有QMYSQL驱动但仍然不能访问
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITEQMYSQL QMYSQL3QODBC QODBC3
如图:
其实2个原因的解决方案是一样的,根本原因是:QMYSQL驱动加载失败
那么,这里就有一个问题:没有QMYSQL驱动的情况加载失败可以理解,为什么有QMYSQL驱动也会加载失败?
答案:因为Qt和MySQL是来自不同企业的产品,由于MySQL版本的修改和更新,Qt官方默认提供的QMYSQL驱动已经过旧,无法适用新版本的MySQL,也可能是安装的Qt版本过新,MySQL版本过旧的情况,但通常软件都是向下兼容的,因此前者的可能性要更高一些。但是不管是前者还是后者,原因是一样的:QMYSQL驱动和当前的MySQL版本不匹配。怎么解决这个问题呢?MySQL的版本修改和更新会同时更新相应的“库文件”,我们只需要拿当前安装的MySQL中的这个“库文件”来重新编译生成一下QMYSQL驱动,就可以正常访问MySQL了。
因此,首先,需要确定一件至关重要的事:检查Qt和MySQL的位数,如果不一致,请卸载其中一个重新安装位数一致的版本。
只有Qt和MySQL的位数一样,才能重新编译QMYSQL驱动。
如图:
我的Qt是32位,但MySQL是64位,因此我选择将MySQL换成32位,将Qt换成64位也可以,但是Qt比较大。
这里要提一嘴,在我第一次遇到Qt访问MySQL失败的时候,我同样是通过百度找到了一些“解决方法”,绝大部分解决方法都提到“MySQL安装路径不能有空格”。这样的说法不能算错,但是很表象,本质应该是这样子的:
Qt编译程序的时候是以空格来解析“编译指令”中的字符串,指定路径中包含空格的时候,会被解析成多个字符串,也就是说,只要保证:编译的时候指定的路径中不包含空格就可以了。
咱们接下来的示例就直接“默认安装MySQL”,咱们用示例重新编译QMYSQL驱动的同时解释一下这个“路径有空格的问题”。
废话就扯这么多了,示例:
①安装32位的MySQL,上面提到了,我的Qt是32位,MySQL是64位,为了保证Qt和MySQL位数一致,我选择将MySQL换成32位,默认安装就可以了。如图:
②查看Qt的版本号,找mysql.pro的路径。
1、版本号:5.9.3,如图:
2、找mysql.pro的路径
在安装Qt的时候,是可以“勾选”安装源码与否的,装没装,打开Qt的安装目录,看一下有没有这个Src文件夹,有就代表装了,如图。
找到这个路径,并复制这个路径:
C:\Qt\Qt5.9.3\5.9.3\Src\qtbase\src\plugins\sqldrivers\mysql
没有装的话,就去官网下载就好了,其实我更偏向于去官网下载。
网站:http://download.qt.io/archive/qt/
根据自己的Qt版本号,x.x.x指Qt版本,可以是你当前的Qt版本,也可以是比当前Qt低的版本(向下兼容嘛,对吧),这个示例我用的是Qt5.7.0的版本(有话说:其实5.0以上的我都试了,5.8以上都会编译出错,有一个细节是5.8以上的mysql项目文件夹下比以往多了几个文件,具体是什么原因,稍后查Qt官方的文档,如果有解决方法会更新的,所以如果大家的Qt版本是5.8以上的话,建议直接和我一样,下载5.7.0的源码文件)
要找的文件:
“qt-everywhere-src-x.x.x.zip”
或
“qtbase-everywhere-src-x.x.x.zip”
下载哪一个都行,第一个是全部的源码(相当于上面路径的Src),第二个是qtbase源码(相当于上面路径的qtbase),其实编译QMYSQL驱动,只需要qtbase源码就可以了,而且qtbase源码体积很小,但是Qt的老版本没有单独提供qtbase等子模块的源码。下载完后,解压出来(我直接解压在C盘),参考上面的路径,找到mysql.pro的路径并复制该路径。
我的路径是:
C:\qtbase-opensource-src-5.7.0\src\plugins\sqldrivers\mysql
③打开Qt命令行,cd到上面的路径,如图:
④重新编译QMYSQL驱动。
上面讲了,“只要保证:编译的时候指定的路径中不包含空格就可以了。”
在步骤③的命令行中依次输入以下2条命令:
命令1:
qmake "INCLUDEPATH+=C:\Program Files (x86)\MySQL\MySQL Server 5.5\include" "LIBS+=C:\Program Files (x86)\MySQL\MySQL Server 5.5\lib\libmysql.lib" -o Makefile mysql.pro
命令2:
mingw32-make
当有空格的时候,错误发生了,如图:
将MySQL安装目录下的include和lib复制到C盘的根目录下,修改上面的2条命令,指定成C盘下的include和lib路径,再次编译。
命令1:
qmake "INCLUDEPATH+=C:\include" "LIBS+=C:\lib\libmysql.lib" -o Makefile mysql.pro
命令2:
mingw32-make
成功编译,如图(没有报错):
⑤替换新编译生成的驱动,如图:
找到新生成的驱动:
复制到这个目录,替换掉原来的老驱动(如果安装的是VS版本的Qt,这里的路径中的mingw53_32应该是msvc什么的):
最后一步,将MySQL安装目录的lib子目录下的libmysql.dll,如图:
复制到
或者直接复制到C:\Windows下也行。
大功告成!测试,如图:
完事,最后把我们复制在C盘下的include、lib、解压的qtbase-opensource-src-5.7.0删掉就OK了。