第一次做Qt,這里把主要的坑列出來(lái)。
連接Mysql
Qt連接mysql的時(shí)候,會(huì)遇到:
QSqlDatabase:QMYSQL driver not loaded
QSqlDatabase:available drivers:QSQLITE QMYSQL QMYSQL3 QOBDC QOBDC3 QPSQL QPSQL7
mysql驅(qū)動(dòng)的問(wèn)題。
Qt 是自帶了mysql的驅(qū)動(dòng),但庫(kù)的版本不對(duì),需要重新編譯。
在工程目錄*.pro 下 添加 :QT += sql
我安裝的是: qt-opensource-windows-x86-mingw491_opengl-5.4.0-rc.exe
1.先去官網(wǎng):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.打開(kāi)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)
也可以在開(kāi)始目錄下找到QT的文件夾,從里面直接打開(kāi)。
4.編譯
4.1:跳到mysql源碼路徑:C:\Qt\Qt5.4.0\5.4\Src\qtbase\src\plugins\sqldrivers\mysql
4.2:執(zhí)行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 已經(jīng)新生成了動(dòng)態(tài)庫(kù),將它拷貝到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.關(guān)閉QT,重新打開(kāi)
QWT庫(kù)的使用
Qwt是Qt的一個(gè)第三方庫(kù),使用的時(shí)候,需要加載這個(gè)庫(kù)。因?yàn)轱@示流量和包流量圖用的就是這個(gè)庫(kù)。
Qt版本:5.4.0
Qwt版本:6.1.2
第一步 在官網(wǎng):https://sourceforge.net/projects/qwt/files/qwt/6.1.2/下載這個(gè)庫(kù),解壓,放到Qt安裝目錄下。

第二步:打開(kāi)qwt.pro,編譯qwt庫(kù)
編譯之前,打開(kāi)qwtbuild.pri ,把第30 行的CONFIG?????????? += debug_and_release? 添加注釋
然后構(gòu)建工程。
第三步:庫(kù)文件的拷貝
1.構(gòu)建的時(shí)候,會(huì)在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 復(fù)制到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 復(fù)制到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 復(fù)制到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\目錄下
第四步:在項(xiàng)目中使用qwt庫(kù)
在項(xiàng)目文件.pro 中,加入以下幾條語(yǔ)句:
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打開(kāi)就可以搜索到qwt控件了。
編譯Release版本
在Debug版本直接切換編譯Release版本會(huì)出現(xiàn)以下問(wèn)題:
Must construct aQApplication before a QPaintDevice
這是因?yàn)榘袲ebug庫(kù)和Release庫(kù)混合了的原因。
在*.pro文件中,把鏈接庫(kù)切換為Release的版本,構(gòu)建項(xiàng)目后,打開(kāi)可執(zhí)行文件,看缺少哪些庫(kù),把缺少的庫(kù)放到可執(zhí)行文件的目錄下。此時(shí)需要注意的是:庫(kù)文件要從mingw491_32\bin下拷貝,不能從Tools\QtCreator\bin下拷貝。
還需要把libmysql.dll? 和qwt.dll拷貝到可執(zhí)行文件路徑下。然后在可執(zhí)行目錄下建一個(gè)二級(jí)目錄: plugins\sqldrivers\ 在這個(gè)目錄下放入mysql庫(kù):qsqlmysql.dll。plugins目錄是我在程序中指定了。如果不指定,就會(huì)提示連接數(shù)據(jù)庫(kù)失敗,好奇怪。
打包程序
需要用到兩個(gè)工具,Qt自帶的windeployqt 這個(gè)工具可以自動(dòng)添加可執(zhí)行文件所依賴(lài)的庫(kù)。還有一個(gè)工具叫做 Engima Virtual Box 是用來(lái)真正打包的!
把可執(zhí)行程序test.exe放到一個(gè)空目錄比如 D:\demo\下
打開(kāi)Qt自帶的命令行,跳到D:\demo\
執(zhí)行:windeployqt test.exe

這一步會(huì)把可執(zhí)行程序依賴(lài)的文件都添加進(jìn)來(lái),直接打開(kāi)可執(zhí)行文件就能運(yùn)行了,如果不能運(yùn)行,就把缺少的庫(kù)加進(jìn)來(lái),比如這個(gè)項(xiàng)目里,它就打不開(kāi),需要手動(dòng)地加:libmysql.dll和qwt.dll 。然后新建目錄plugins,把sqldrivers目錄放進(jìn)plugins里,作為它的子目錄。和Release下的路徑一樣,在程序中已經(jīng)指定了,這里有點(diǎn)坑。在打包之前,運(yùn)行可執(zhí)行程序要沒(méi)問(wèn)題!
開(kāi)始打包:
運(yùn)行Enigma Virtual Box

注意要把所有需要的程序都添加進(jìn)來(lái),在 File Options 選項(xiàng)中,選擇Compress Files 壓縮。
然后點(diǎn)擊Process開(kāi)始打包,等待完成。