淺入深出QWT現(xiàn)在看到的本文已經(jīng)是第三版,寫這篇博文的起初原因是本菜菜最近準(zhǔn)備使用Qwt開發(fā)一些功能部件,而公司里基本是使用win Xp系統(tǒng)進(jìn)行開發(fā)工作,為了便于日后的團(tuán)隊(duì)開發(fā),所以研究了怎么將qwt庫(kù)和QtCreator整合起來。但是由于不是很嚴(yán)謹(jǐn)?shù)膽B(tài)度,但隨便的實(shí)驗(yàn)感覺成 功后,感覺整合沒問題后,就輕松地寫了篇博文,幸虧由于shiroki大姐的指出,才發(fā)現(xiàn)許多不足,甚至是嚴(yán)重的錯(cuò)誤會(huì)誤導(dǎo)別人。通過雙休日的不懈努力和 研究,總算實(shí)驗(yàn)成果,并且證實(shí)了本菜菜的思路,而且對(duì)于Qt更加了解,對(duì)以前缺少的知識(shí)點(diǎn)也得到了補(bǔ)足,這個(gè)內(nèi)容么,也真正做到的淺入深出。在基于Qt繪制科學(xué)圖表 -- Qwt試用中,shiroki大姐介紹了怎么樣在linux下安裝qwt,并使用qwt,本菜菜經(jīng)過在winXp操作系統(tǒng)下的不斷嘗試,發(fā)現(xiàn)能快速地使用Qt Creator進(jìn)行編譯,而在開發(fā)程序時(shí)也能使用Qt Creator進(jìn)行,故詳細(xì)地介紹給大家。首先確定你使用的是winXP操作系統(tǒng),并且已經(jīng)安裝了Qt SDK for windows,如果沒有安裝,可以去Qt官方網(wǎng)站下載安裝包安裝,安裝的過程十分簡(jiǎn)便,跟普通的windows的EXE安裝包沒有太大區(qū)別,指定好路徑,一路next就可以安裝,在安裝完成后,也無需設(shè)置環(huán)境變量即可使用來編寫編譯Qt程序。 安 裝完畢后,即可使用QtCreator,然后去下載qwt的源代碼,目前的版本為qwt-5.2.0,在前面文章中提供過項(xiàng)目主頁地址,在項(xiàng)目主頁地址下 可以選擇下載對(duì)應(yīng)linux的tar源碼壓縮包或者對(duì)應(yīng)win的zip源碼壓縮包,我們選擇的自然是zip壓縮包,然后下載完成后,解壓在英文路徑下的目 錄即可。 有了Qt SDK,qwt的編譯過程自然就變得簡(jiǎn)單無比了,環(huán)境變量啊,Qt的lib庫(kù)啊,一切都有Qt SDK幫助,這就是為什么是我想說傻瓜式安裝qwt的原因。相比以前的編譯,安裝和設(shè)置環(huán)境變量,使用Qt Creator可以幫助簡(jiǎn)化步驟。 打開Qt Creator,打開qwt源碼目錄下的.pro工程文件,然后點(diǎn)擊左下的run按鈕,qwt就開始了自動(dòng)編譯的的過程: 編譯過程需要5到10分種時(shí)間,可以坐下別的事,或者喝杯咖啡什么的>_<,并且Qt Creator幫助我們做好一切工作,我們只要等待編譯完成就可以了。 當(dāng) 編譯完成后,只要完成最后一步就可以在winXP上使用QtCreator來編寫qwt相關(guān)程序,并且在Qt設(shè)計(jì)師里使用qwt的部件。在編譯完成qwt 目錄下,有l(wèi)ib目錄和designer目錄,將lib目錄里的qwt5.dll文件拷貝至qt sdk的目錄下的qt目錄的bin目錄中(比如本菜菜為F:\Qt\2009.03\qt\bin),將libqwt5.a文件拷貝至對(duì)應(yīng)的lib目錄 (如F:\Qt\2009.03\qt\lib),最后將designer目錄下的plugins目錄的designer目錄(真繞口啊囧)下的 libqwt_designer_plugin5.a文件和qwt_designer_plugin5.dll拷貝到跟上面一樣對(duì)應(yīng)的plugins目錄 下的designer目錄(如F:\Qt\2009.03\qt\plugins\designer),看起來十分繁瑣,其實(shí)是非常簡(jiǎn)單的過程。 好吧,如果真是這樣用真的就太美好了,真的是傻瓜式的安裝,只要編譯好將庫(kù)文件復(fù)制過去,這真是容易極了。。。 但是事與愿違,這一切只是淺入的開頭,真正的深出還在后面,以上這樣步驟可以視為是準(zhǔn)備qwt庫(kù)的過程,而真正要寫qwt還有很重要的步驟,本菜菜將放在下一篇詳細(xì)解說,如果你想在winXP上使用qwt,就請(qǐng)先按這些步驟完成吧。 在上篇中,介紹了如何使用QtCreator編譯安裝qwt,現(xiàn)在介紹怎么使用QtCreator來編寫使用了qwt庫(kù)的qt程序。 為 了簡(jiǎn)化流程,本菜菜直接復(fù)制了qwt中example的代碼,并且使用QtCreator新建一個(gè)工程并將代碼粘貼進(jìn)去。這時(shí)如果誤以為只要點(diǎn)擊run就 可以運(yùn)行程序,那就是大錯(cuò)特錯(cuò)了。本菜菜開始時(shí)就犯了如下的錯(cuò)誤,不幸的是,是直接使用了qwt目錄里的example,而里面的pro工程文件可是設(shè)置 完畢的,只要生成了庫(kù)文件dll和libxx.a的文件情況下,自然是可以運(yùn)行的。本菜菜就是這樣被蒙蔽了,才造成qwt庫(kù)設(shè)置完畢的假象。 這時(shí)如果點(diǎn)擊run,多半會(huì)出現(xiàn)以下錯(cuò)誤: 簡(jiǎn) 單地來說,就是QtCreator找不到qwt庫(kù)中各個(gè)類型的聲明。解決的辦法也很簡(jiǎn)單,將qwt的頭文件包含進(jìn)去即可。去qwt的解壓目錄,在下面有個(gè) src目錄,里面就有所有qwt的源碼文件,將其中的.h頭文件復(fù)制出來,然后去Qt SDK的安裝目錄,在下面的qt子目錄的include目錄里(比如F:\Qt\2009.03\qt\include)新建一個(gè)Qwt文件,將復(fù)制出來 的.h文件粘貼進(jìn)去。 Qwt畢竟是第三方庫(kù),指望QtCreator能自動(dòng)認(rèn)出來,還需要在.pro里文件設(shè)置LIBS和INCLUDEPATH ,這些屬于qmake的知識(shí)范疇內(nèi),有興趣的朋友可以去看看文檔qmake手冊(cè)部分:http://qt./doc/4.5/qmake-manual.html. 本菜菜的設(shè)置如下: LIBS += -L”f:/Qt/2009.03/qt/lib” -lqwt5 INCLUDEPATH += f:/Qt/2009.03/qt/include/qwt 各人設(shè)置愛好都不一樣,大家可以根據(jù)自己的需求來設(shè)置。 上面這些步驟濃縮起來時(shí)很簡(jiǎn)單,但在一無所知地情況下,本菜菜花費(fèi)了大量的時(shí)間來嘗試,可謂步步都留下辛勤的汗水。 恐怕很多在想了,現(xiàn)在總可以正常使用qwt了吧,好吧,我也是這樣想的,結(jié)果卻是: 真 是很郁悶的錯(cuò)誤啊,然后又花費(fèi)了大量的時(shí)間進(jìn)行研究,原因其實(shí)也很簡(jiǎn)單,在winXP下面,Qt是不能混用庫(kù)的。在QtCreator下面,默認(rèn)編譯運(yùn)行 的是debug模式,而本菜菜編譯出來的是release庫(kù),自然就不行了。這時(shí)設(shè)置QtCreator為release模式,就能運(yùn)行程序,但這樣,調(diào) 試怎么辦了? 當(dāng)然,只要編譯qwt生成debug庫(kù)文件,自然就可以在QtCreator下使用debug模式編譯使用。 這是,去qwt的源碼目錄,打開qwtconfig.pri文件,可以使用記事本,也可以使用類似UltraEdit的軟件工具,在里面找到這段: win32 { CONFIG += debug # release/debug/debug_and_release 修改成為 win32 { #CONFIG += debug # release/debug/debug_and_release 然后按照上篇中的編譯流程,最后把生成的dll和.a文件拷貝過去即可,其中,如果是debug的文件,文件名會(huì)多個(gè)d,比如qwtd5.dll,而在QtCreator里運(yùn)行debug模式,也需要在.pro文件里稍作修改: LIBS += -L”f:/Qt/2009.03/qt/lib” -lqwtd5 INCLUDEPATH += f:/Qt/2009.03/qt/include/qwt 最后,程序總算能成功運(yùn)行了,整合到設(shè)計(jì)器的部分就請(qǐng)等下篇吧 在上和中篇中,通過一些列簡(jiǎn)單的配置,我們可以方便在WinXP上編譯安裝Qwt庫(kù),并且對(duì)pro文件作少需修改,就可以順利的使用Qwt庫(kù)開發(fā)程序。 對(duì) 于習(xí)慣敲代碼的人來說,到這步已經(jīng)足以滿足開發(fā)的需求,但對(duì)于要求快速應(yīng)用開發(fā)或者是習(xí)慣于Qt設(shè)計(jì)器的開發(fā)人員來說,這還遠(yuǎn)遠(yuǎn)不夠。細(xì)心的人可能會(huì)覺 得,前面把庫(kù)文件復(fù)制過去了,不是應(yīng)該已經(jīng)集成到了Qt設(shè)計(jì)器里么。這樣想的人可以說,對(duì)于Qt SDK是不甚了解,Qt SDK是由兩部分組成,Qt Creator 和Qt 庫(kù),沒有Qt Creator,照樣能使用Qt庫(kù)寫程序,沒有了Qt庫(kù),Qt Creator可干不了什么。 在上中,我做的緊緊是把Qwt庫(kù)集成到了Qt庫(kù)中,如果啟動(dòng)Qt的庫(kù)的設(shè)計(jì)器,自然就能看到旁邊可選擇得Qwt部件,而在QtCreator的設(shè)計(jì)器中,是不會(huì)出現(xiàn)Qwt的部件。 以
此類推,解決的辦法就是講Qwt插件文件復(fù)制到QtCreator的bin目錄下去,如我就是F:\Qt\2009.03\bin\designer。假
如這能一次性成功,那該是多么好的事情,現(xiàn)實(shí)是殘酷的,QtCreator中的設(shè)計(jì)器顯示該插件無法加載,而錯(cuò)誤信息顯示: 明明Qt庫(kù)是用mingw編譯,為什么會(huì)出現(xiàn)msvc編譯器呢?于是仔細(xì)查找了有關(guān)資料,發(fā)現(xiàn)以下這段話: The version of QT Creator shipped with the QT SDK Open Source version for windows is build using Visual Studio, whereas the SDK is build with and supports g++ (MinGW). This doesn’t cause too many problems, but it totally defeats building and installing QT Designer plugins into QT Creator. The error message is: Expected build key “Windows msvc release full-config” got “Windows mingw release full-config” 結(jié)果非常清晰了,Qt SDK for Windows的兩部分是由不同編譯環(huán)境編譯而成,QtCreator是由msvc編譯,Qt庫(kù)是由mingw編譯,我們編譯出來的Qwt庫(kù)是基于mingw的Qt庫(kù),自然就不能被QtCreator識(shí)別。 那解決的辦法也自然出來了: 1) Build QT Creator from source with MinGW 相信這樣的英文難不倒各位,而我選擇了第一種辦法,嘿嘿,只要拿現(xiàn)有的QtCreator把從官下載的QtCreator源碼編譯下,不就OK了么,多么easy的過程。看過上的同學(xué)們應(yīng)該能很輕易的完這步驟。 重新使用編譯完的QtCreator后,Qwt部件總算出現(xiàn)了,漫長(zhǎng)繁瑣的文章也到此為止,希望大家都能順利地使用上Qwt庫(kù)。 |
|