第一个Qt项目小结

第一次做Qt,这里把主要的坑列出来。

连接Mysql

Qt连接mysql的时候,会遇到:

QSqlDatabase:QMYSQL driver not loaded

QSqlDatabase:available drivers:QSQLITE QMYSQL QMYSQL3 QOBDC QOBDC3 QPSQL QPSQL7

mysql驱动的问题。

Qt 是自带了mysql的驱动,但库的版本不对,需要重新编译。

在工程目录*.pro 下 添加 :QT += sql

我安装的是: qt-opensource-windows-x86-mingw491_opengl-5.4.0-rc.exe

1.先去官网:https://dev.mysql.com/downloads/connector/c/

下载:mysql-connector-c-6.1.11-win32

目前已放到 D:\mysql-connector-c-6.1.11-win32

2.QT目录mysql源码的位置:C:\Qt\Qt5.4.0\5.4\Src\qtbase\src\plugins\sqldrivers\mysql

3.打开Qt5.4终端:C:\Users\qinxiangqing\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Qt 5.4.0\5.4\MinGW 4.9 (32-bit)\Qt 5.4 for Desktop (MinGW 4.9 32 bit)

也可以在开始目录下找到QT的文件夹,从里面直接打开。

4.编译

4.1:跳到mysql源码路径:C:\Qt\Qt5.4.0\5.4\Src\qtbase\src\plugins\sqldrivers\mysql

4.2:执行qmake:qmake "INCLUDEPATH+=D:\mysql-connector-c-6.1.11-win32\include" "LIBS+=D:\mysql-connector-c-6.1.11-win32\lib\libmysql.lib" -o Makefile mysql.pro

路径一定要存在

4.3: mingw32-make   等待编译完成

5.在C:\Qt\Qt5.4.0\5.4\Src\qtbase\plugins\sqldrivers 已经新生成了动态库,将它拷贝到C:\Qt\Qt5.4.0\5.4\mingw491_32\plugins\sqldrivers

将D:\mysql-connector-c-6.1.11-win32\lib\libmysql.dll 拷贝至 C:\Qt\Qt5.4.0\5.4\mingw491_32\bin\

6.关闭QT,重新打开


QWT库的使用

Qwt是Qt的一个第三方库,使用的时候,需要加载这个库。因为显示流量和包流量图用的就是这个库。

Qt版本:5.4.0

Qwt版本:6.1.2

第一步 在官网:https://sourceforge.net/projects/qwt/files/qwt/6.1.2/下载这个库,解压,放到Qt安装目录下。

第二步:打开qwt.pro,编译qwt库

编译之前,打开qwtbuild.pri ,把第30 行的CONFIG           += debug_and_release  添加注释

然后构建工程。

第三步:库文件的拷贝

1.构建的时候,会在Qwt根目录下生成build-qwt-Desktop_Qt_5_4_0_MinGW_32bit-Debug的文件夹。

2.将C:\Qt\Qt5.4.0\build-qwt-Desktop_Qt_5_4_0_MinGW_32bit-Debug\lib的libqwt.a和libqwtd.a 复制到C:\Qt\Qt5.4.0\5.4\mingw491_32\lib\下

3.将C:\Qt\Qt5.4.0\build-qwt-Desktop_Qt_5_4_0_MinGW_32bit-Debug\lib的qwt.dll和qwtd.dll 复制到C:\Qt\Qt5.4.0\5.4\mingw491_32\bin\下

4.将C:\Qt\Qt5.4.0\build-qwt-Desktop_Qt_5_4_0_MinGW_32bit-Debug\designer\plugins\designer\

qwt_designer_plugin.dll 复制到C:\Qt\Qt5.4.0\5.4\mingw491_32\plugins\designer\下

5.在C:\Qt\Qt5.4.0\5.4\mingw491_32\include 目录下新建目录 qwt\ ,把C:\Qt\Qt5.4.0\qwt-6.1.2\src下所有的头文件拷贝到新建的qwt\目录下

第四步:在项目中使用qwt库

在项目文件.pro 中,加入以下几条语句:

CONFIG += qwt

DEFINES += QT_DLL QWT_DLL

LIBS += -L"C:\Qt\Qt5.4.0\build-qwt-Desktop_Qt_5_4_0_MinGW_32bit-Debug\lib" -lqwtd

LIBS += -L"C:\Qt\Qt5.4.0\build-qwt-Desktop_Qt_5_4_0_MinGW_32bit-Debug\lib" -lqwt

INCLUDEPATH += C:\Qt\Qt5.4.0\5.4\mingw491_32\include\qwt

右击ui文件,用Qt Designer打开就可以搜索到qwt控件了。


编译Release版本

在Debug版本直接切换编译Release版本会出现以下问题:

Must construct aQApplication before a QPaintDevice

这是因为把Debug库和Release库混合了的原因。

在*.pro文件中,把链接库切换为Release的版本,构建项目后,打开可执行文件,看缺少哪些库,把缺少的库放到可执行文件的目录下。此时需要注意的是:库文件要从mingw491_32\bin下拷贝,不能从Tools\QtCreator\bin下拷贝。

还需要把libmysql.dll  和qwt.dll拷贝到可执行文件路径下。然后在可执行目录下建一个二级目录: plugins\sqldrivers\ 在这个目录下放入mysql库:qsqlmysql.dll。plugins目录是我在程序中指定了。如果不指定,就会提示连接数据库失败,好奇怪。


打包程序

需要用到两个工具,Qt自带的windeployqt 这个工具可以自动添加可执行文件所依赖的库。还有一个工具叫做 Engima Virtual Box 是用来真正打包的!

把可执行程序test.exe放到一个空目录比如 D:\demo\下

打开Qt自带的命令行,跳到D:\demo\

执行:windeployqt test.exe


这一步会把可执行程序依赖的文件都添加进来,直接打开可执行文件就能运行了,如果不能运行,就把缺少的库加进来,比如这个项目里,它就打不开,需要手动地加:libmysql.dll和qwt.dll 。然后新建目录plugins,把sqldrivers目录放进plugins里,作为它的子目录。和Release下的路径一样,在程序中已经指定了,这里有点坑。在打包之前,运行可执行程序要没问题!

开始打包:

运行Enigma Virtual Box


注意要把所有需要的程序都添加进来,在 File Options 选项中,选择Compress Files 压缩。

然后点击Process开始打包,等待完成。

推荐阅读更多精彩内容