第一次做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开始打包,等待完成。