Qt、MySQL环境搭建

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了。

猜你喜欢

转载自blog.csdn.net/qq1623803207/article/details/78920690