Qt的安装和使用中的常见问题(详细版)
對于太長不看的朋友,可參考Qt的安裝和使用中的常見問題(簡略版)。
目錄
- 1、引入
- 2、Qt簡介
- 3、Qt版本
- 3.1 查看安裝的Qt版本
- 3.2 查看當(dāng)前項目使用的Qt版本
- 3.3 查看當(dāng)前項目使用的QtCreator版本
- 3.4 Linux命令行下查看和使用不同版本的Qt
- 4、Qt模塊
- 5、引用頭文件報錯
1、引入
對于Qt的初學(xué)者來說,Qt有很多不熟悉的地方,安裝和使用時,都會遇到各種各樣的“坑”。這些坑,如果經(jīng)歷過一次,就會發(fā)現(xiàn)其實是很簡單的問題。但是如果不熟悉,那么可能折騰很久也沒解決。因此我把我自己遇到的(也是后來常常被問到的)一些問題放在這里,供大家參考、討論。
這個版本寫得詳細(xì)一些,適合喜歡了解細(xì)節(jié)的朋友。對于太長不看的朋友,可參考Qt的安裝和使用中的常見問題(簡略版)。
2、Qt簡介
Qt是一款基于C++的跨平臺開發(fā)框架,不僅提供了便捷好用的圖形庫,而且提供的框架比C++本身更好用(個人感覺)。
Qt和QtCreator
有些人可能會把Qt和QtCreator弄混,但是這兩個是不同的概念。
- Qt:跨平臺開發(fā)框架,包括圖形庫、其他功能庫(多媒體、網(wǎng)絡(luò)等)以及對C++的擴(kuò)展。
- QtCreator:專為使用Qt框架開發(fā)的集成開發(fā)環(huán)境(IDE)。QtCreator本身基于Qt框架開發(fā)的。
QtCreator不是Qt,它運(yùn)行起來只需要部分Qt庫,所以QtCreator能運(yùn)行,根本不代表Qt所有模塊已經(jīng)被完整安裝了。
3、Qt版本
開發(fā)時經(jīng)常涉及Qt版本問題,因為最新的版本可能提供更多的功能,但是有些以前的代碼是用舊版本寫的,因此要特別注意自己的版本。
3.1 查看安裝的Qt版本
一般情況下,你下載了比如說Qt 5.8的安裝包,安裝之后,Qt的版本自然是5.8。但是,假如你安裝了多個版本的Qt,情況就復(fù)雜一點。事實上,你可以在QtCreator選擇對當(dāng)前的項目使用哪個版本的Qt來構(gòu)建。
下面是查看Qt版本的方法:
菜單欄 -> 工具(Tools) -> 選項(options)
左側(cè)邊欄里,選中“構(gòu)建與運(yùn)行(Build & Run)”,然后注意看右側(cè)上部的標(biāo)簽,有構(gòu)建套件(kit)、Qt版本(Qt Versions)、編譯器(compiler)、調(diào)試器(Debugger)等。
構(gòu)建套件指的是一些用來構(gòu)建你編寫的代碼的工具組合。這個組合里主要包括三個東西:qmake工具、編譯器、調(diào)試器。
不同的組合就是不同的構(gòu)建套件。你可以看到你的默認(rèn)套件是哪個。當(dāng)你打開一個之前沒有打開過的Qt項目,或者新建一個Qt項目時,QtCreator都會讓你選擇一個套件,而默認(rèn)的就是這里顯示的默認(rèn)套件。
點擊任意一個套件,就能看到詳情:
這里,注意其中有一項叫做Qt版本(Qt version)??梢钥吹?#xff0c;我這里的是Qt5.8。
這就意味著,當(dāng)你使用這個套件的時候,你使用的Qt版本是5.8。當(dāng)然,這個套件的名字里寫了是5.8.0,不過要注意的是,手動設(shè)置的套件名字可以任意取,所以還是要點進(jìn)去確認(rèn)一下。
我這里就裝了兩個版本的Qt,分別是5.7和5.8,所以這里能看到另一個套件對應(yīng)的Qt版本是5.7。
前面說了,這個套件是一個組合,不一定就包含了你的計算機(jī)上所有的Qt版本。怎么知道計算機(jī)上有哪些Qt版本可用呢?
這就需要切換到Qt版本(Qt Versions)頁面了。
這里就能看到所有已經(jīng)自動檢測到的,或者手動配置的Qt版本。細(xì)心的朋友已經(jīng)發(fā)現(xiàn)了,每一個Qt版本后面,對應(yīng)的是一個qmake.exe(Linux下沒有后綴,就是qmake)。
沒錯!決定你所使用的Qt版本的就是qmake工具的版本!Qt項目一般都是用qmake來管理的(按照默認(rèn)配置新建Qt項目,就是這樣),而每次構(gòu)建之前,qmake都會執(zhí)行,其中有個重要的任務(wù)就是告訴后續(xù)的編譯器,應(yīng)該用哪個版本Qt庫來編譯這些程序。
所以,前面說的套件里的Qt版本,其實就是這個套件使用的qmake的版本。而套件里的編譯器和調(diào)試器等等,與你使用的Qt版本關(guān)系不大。
3.2 查看當(dāng)前項目使用的Qt版本
有個項目的代碼最初打開的時候沒留意用的套件和版本,或者代碼是從別人那里拷貝過來的,我怎么知道是用的哪個版本呢?
方法很簡單!在QtCreator里打開這個項目,然后在最左側(cè)的欄目里,切換到項目(Project):
因為QtCreator版本不同,所以你的界面可能跟我不一樣。不過沒關(guān)系,關(guān)鍵東西都在。找到Build & Run,然后就能看到這個項目正在使用的是什么套件以及什么Qt版本了。
例如,我這個項目使用的構(gòu)建套件名稱是Qt 5.8.0 (mingw53_32),對應(yīng)的Qt版本是5.8.0。
3.3 查看當(dāng)前項目使用的QtCreator版本
前面說了Qt和QtCreator是不同的。Qt有版本,QtCreator作為一款軟件也有版本。在QtCreator菜單 -> 幫助 -> 關(guān)于QtCreator就可以查看了。
例如這里,我的QtCreator的版本是4.2.1,是基于Qt5.8.0開發(fā)的。
3.4 Linux命令行下查看和使用不同版本的Qt
如果在Linux命令行下使用,例如編譯一些簡單程序或第三方庫,可以不需要啟動QtCreator,直接在命令行中編譯。這種情況,一般要求先執(zhí)行qmake,再執(zhí)行make。而執(zhí)行qmake時就決定了使用哪個版本的Qt,要特別注意。
所以在不確定的情況下,應(yīng)該使用qmake -v來查看Qt版本。如果執(zhí)行之后發(fā)現(xiàn)版本不對,想用其他版本。那么需要找到你想用的版本對應(yīng)的qmake執(zhí)行文件在哪里。這個會復(fù)雜一些,下面簡單說一下。
1、如果安裝了多個版本的Qt,用find指令或者其他方式搜索qmake執(zhí)行文件,并且檢查一下搜索到的qmake分別對應(yīng)什么版本的Qt。注意針對搜索到的qmake,使用時要帶完整路徑,例如
$ sudo find / -name qmake # 查找名為qmake的文件 /home/XYZX/Qt5.8.0/5.8/gcc_64/bin/qmake # 這個是舉例 $ /home/XYZX/Qt5.8.0/5.8/gcc_64/bin/qmake -v # 查看某個找到的qmake是什么版本之后如果要使用這個特定的qmake,那么編譯的時候不能只輸入qmake了,而是要有完整路徑,和上面查看版本的時候一樣:
$ /home/XYZX/Qt5.8.0/5.8/gcc_64/bin/qmake $ make2、設(shè)置默認(rèn)的qmake
注意:我給出的目錄是我的情況,并非通用,不同系統(tǒng)上的路徑可能不同,但是大同小異,也可以通過搜索查看。
默認(rèn)的qmake就是在命令行里直接輸入qmake時使用的。用which qmake可以看到對應(yīng)的文件是/usr/bin/qmake。
用ls -l /usr/bin/qmake指令可以發(fā)現(xiàn)這個其實是個連接,指向的是/usr/bin/qtchooser。也就是由這個“選擇器”來選擇版本的。選擇的依據(jù)是配置文件。
該配置文件是:/usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf。而進(jìn)一步可以發(fā)現(xiàn)此文件仍然只是一個鏈接,如果要修改默認(rèn)qmake,則需要修改此鏈接指向的具體文件。
例如,我的電腦上,該文件指向的是/usr/share/qtchooser/qt4-x86_64-linux-gnu.conf。
等等……我還在用Qt4?不不不……不要被文件名騙了,一定要打開文件查看一下!以下是我電腦上/usr/share/qtchooser/qt4-x86_64-linux-gnu.conf的內(nèi)容:
不出意外的話,#開頭的都是注釋。那么有效的就是第一句話了,看來用的/home/xyzx/Qt5.8.0/5.8/gcc_64/bin里的qmake,其實是Qt5.8.0版本。
而與這個文件同級目錄下(即/usr/share/qtchooser/)還可能有其他的同類文件。確認(rèn)要使用哪個配置文件后,將鏈接/usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf指向這個文件即可,例如
再次提醒:我這里寫的目錄可能跟你的實際情況不同。
4、Qt模塊
Qt框架是由多個模塊構(gòu)成的。最核心的是QtCore,也是必須的。如果不使用這個核心模塊,那其實是在用純C++編程,跟Qt無關(guān)了。其他模塊還有:
- GUI 圖形界面
- Multimedia 多媒體
- Network 網(wǎng)絡(luò)功能
- SQL 數(shù)據(jù)庫
這里只列舉了部分。
在使用Qt編程時,有兩個常見問題。
問題1:
用QtCreator打開項目時提示:Unknown module(s): XXXX
原因:提示的那個Qt模塊,你電腦上沒有安裝。一般是在Linux上通過apt來安裝Qt,之后發(fā)現(xiàn)這個問題。因為你沒有安裝所有Qt模塊。正如前面所說的,不是說QtCreator能運(yùn)行,就意味著你的Qt裝完整了。
解決辦法就是安裝這個模塊。如果使用apt或synaptic安裝軟件包,如何查找呢?對于Qt5版本,Qt模塊的軟件包名稱有規(guī)律,都是libqt5開頭的,后面跟模塊名稱。例如Qt5核心模塊的軟件包是libqt5core5a,GUI模塊的軟件包是libqt5gui5。后面可能會跟不同后綴。
有一個例外(就我目前遇到的),是multimedia。除了剛才說的包之外,你可能還需要安裝qtmultimedia5-dev。
對于缺少模塊的情況,一般安裝libqt5+模塊名的包就可以了。安裝完成后需要重新打開QtCreator。
如果安裝完后還是不行,那么可以將名稱相關(guān)的包都安裝試試。
問題2:
引用一個Qt的頭文件,結(jié)果提示:No such file or directory: QXXXX.h
原因:你沒有在你的項目里引入這個模塊。
解決方法很簡單,在.pro文件中加入這個模塊。添加位置是開頭的QT += ...后面。例如,你想引用QTcpServer.h,首先在幫助里查找QTcpServer類,看到它屬于network模塊,再引入這個模塊。如果QtCreator里打不開幫助,也可以在網(wǎng)頁上搜索,因為Qt官方網(wǎng)站提供了幫助文檔。
例如這一行原本如下,表示使用了core和gui兩個模塊。
QT += core gui新增network模塊:
QT += core gui network注意:全小寫,用空格與之前的隔開。
5、引用頭文件報錯
問題1:引用一個自己的頭文件,.h文件已經(jīng)存在于項目文件夾里了,但是編譯時報錯:No such file or directory: XXXX.h
原因:文件沒有加入項目。去.pro文件里查看,這個頭文件是否已經(jīng)加入到headers列表里。如果沒有加入的話,也不用自己敲鍵盤把文件名寫到列表里,直接對項目名點擊鼠標(biāo)右鍵,再點擊“添加已有文件”,選擇報錯的文件(包括沒有加入sources列表的cpp文件)。
問題2:引用一個頭文件,.h文件存在且已經(jīng)加入項目,但是編譯時還是報錯:No such file or directory: XXXX.h
問題:引用路徑錯誤。對于一些復(fù)雜一點的項目,不同功能的代碼是放在不同的文件夾下的。引用時確保寫上了頭文件的相對路徑。你在哪里引用就相對于誰。
例如,有一個頭文件位于/project/function/function1.h,而此時你編輯的文件是/project/ui/mywindow.h,那么引用時的寫法是:#include "../function/function1.h"。
另外,.pro文件里可以加入一個INCLUDEPATH +=,可以自定義引用搜索路徑。如果在.pro文件里寫入了
INCLUDEPATH += \ function \ ui
那么,在項目的任何文件里,引用/project/function/function1.h或者/project/ui/mywindow.h時,都可以直接寫#include "function1.h"和#include "mywindow.h"
謝謝關(guān)注
未完待續(xù)
轉(zhuǎn)載于:https://www.cnblogs.com/xia-weiwen/p/10074882.html
總結(jié)
以上是生活随笔為你收集整理的Qt的安装和使用中的常见问题(详细版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安阳看精子活力低最好的医院推荐
- 下一篇: 各行业大数据可视化界面参考