【干貨】如何搭建QT開發(fā)環(huán)境
來源:原創(chuàng) 時間:2017-04-18 瀏覽:0 次
Qt 是一個跨平臺的 C++應(yīng)用手續(xù)研發(fā)框架。它提提供研發(fā)者樹立圖形用戶界 面所需的功能,廣泛用于研發(fā) GUI 手續(xù),也可用于研發(fā)非 GUI 手續(xù)。Qt 是絕對 面向?qū)ο蟮?很容易擴展,況且準(zhǔn)許真正地組件編程。Qt 運用標(biāo)準(zhǔn)的 C++和特別的代碼生成擴展(稱為元對象編譯器 Meta Object Compiler, moc)以及一點宏。
基本上,Qt 同 X11 上的 GTK、Motif、Openwin 和 Windows 上的 MFC,OWL, VCL,ATL 是同類型的物品,不過 Qt 支持更多的平臺(涵蓋 Microsoft Windows、GNU/Linux、Mac OS X、Android、iOS、WinCE、UNIX 親族等),面向?qū)ο笄野鍓K化程度更高(Qt 供給了一種稱為 signals/slots 的安全類型來代替 callback,這 要得各個元件之間的協(xié)同辦公變得非常簡單),浩博的API(Qt 涵蓋多達(dá) 250個 以上的C++ 類還供給基于模型板類的collections,serialization,file,I/Odevice,directory,management, date/time 類。甚至于還涵蓋正則表現(xiàn)式的處置功能),支 持 2D/3D 圖形渲染,支持 OpenGL、數(shù)量多的研發(fā)文檔、XML 支持等。運用 Qt 研發(fā)的軟件,相同的代碼可以在不論什么支持的平臺上編譯運行,而不必改正源代 碼。它會半自動依據(jù)平臺的不一樣,表達(dá)平臺特有的圖形界面風(fēng)格。
通過積年進(jìn)展,Qt 不惟領(lǐng)有了完善的 C++圖形庫,并且近年來的版本漸漸集成了數(shù)值庫、OpenGL 庫、多電視臺庫、網(wǎng)路、腳本代碼庫、XML 庫、WebKit 庫等等, 其中心庫也參加了進(jìn)程項間通信、多線程等板塊,莫大地浩博了 Qt 研發(fā)大規(guī)模復(fù) 雜跨平臺應(yīng)用手續(xù)的有經(jīng)驗,真正意義上成功實現(xiàn)了其開發(fā)宗旨“Code Less; Create More; Deploy Anywhere.”

二
QT 在 windows 下的背景建造
在 windows 背景下,可以運用 vs+qt 的研發(fā)背景施行項目研發(fā),背景建造時有點細(xì)節(jié)要注意:
1
下載
下載時要注意下載和 vs 版本相般配的 qt 版本,以及 Add-in 工具。找到對應(yīng) 的版本施行下載,里邊粉和水發(fā)酵制成的食品含多種不一樣的版本,MSVC2010、MSVC2012 作別是指支 持 VS2010 與 VS2012 的 Qt 版本,而 opengl 與非 opengl 的差別是是否支持 opengl, android、ios 作別是指支持 android、ios 平臺的 Qt 版本。這處我挑選的版本(已示明),如下所述:
qt-windows-opensource-5.2.0-msvc2010_opengl-x86-offline.exe(opengl版本)
Visual Studio Add-in 1.2.2 for Qt5
如圖:
2
安裝
qt-windows-opensource 與 Visual Studio Add-in 的安裝順著次序沒關(guān)系要求,安裝途徑不要里面含有漢字、空格、特別字符(~<>?*!@#$百分之百^&:,;)。 安裝完成 Visual Studio Add-in 在這以后,VS 便會顯露出來相應(yīng)的 Qt 選項!
3
配備布置研發(fā)背景
挑選:Qt5->Qt Options->Add,配備布置 VS 的研發(fā)背景。
這處依據(jù)自個兒的 Qt 安裝途徑施行挑選,Path 為: D:SoftwareQtQt5.2.0.2.0msvc2010_opengl。 到這處,研發(fā)背景就配備布置完成了,可以導(dǎo)入還是新建項目了。
導(dǎo)入Qt的pro項目。
挑選:Qt5->Open Qt Project File(.pro)...
新建Qt項目
挑選:文件->新建->項目->Qt5 Projects->Qt Application,輸入工程名,下一步...施行新建。
新建完成在這以后,就可以運行了!
三
QT 的一點獨特的地方以及簡單運用
1
圖形用戶界面
Qt 的圖形用戶界面的基礎(chǔ)是 QWidget。Qt 中全部類型的 GUI 組件如按鍵、標(biāo)簽、工具欄等都分化自 QWidget,而 QWidget 本身則為 QObject 的子類。Widget 負(fù)責(zé)收繳鼠標(biāo),鍵盤和來自窗戶系統(tǒng)的其它事情,并描畫了自身顯露在熒幕上。 每一個 GUI 組件都是一個 widget,widget 還可以作為器皿,在其內(nèi)部面含有其它 Widget。
下邊以登陸窗戶為例:
左側(cè)的列表是 QT 的控件列表,列表中的全部控件都可以放在 QWidget 上。 QWidget 顯露有經(jīng)驗里面含有了透明化等功能。 設(shè)置透明化,有幾種形式,我們這處用到的是設(shè)置式樣表的形式,下邊的例子是設(shè)置 QLineEdit 控件透明沒有邊際框。
如圖:

Qt 供給一種托管機制,當(dāng) Widget 于開創(chuàng)時指定父對象,就可把自個兒的性命 周期交付領(lǐng)導(dǎo)對象管理,當(dāng)領(lǐng)導(dǎo)對象被開釋時,自個兒也被開釋。保證對象不再使 用時都會被刪去。
這個登陸窗戶中的全部控件的父 widget 都是這個窗戶,所以在窗戶被毀掉時, 全部控件也同時被毀掉,不必自個兒去扼制。所以析構(gòu)函數(shù)的成功實現(xiàn)函數(shù)中可以不施行處置,代碼如下所述:
LoginDialog::~LoginDialog() {
}
2
信號與槽機制(Signals and Slots)
Qt 利用信號與槽(signals/slots)機制代替?zhèn)鹘y(tǒng)的 callback 來施行對象之間的溝通。當(dāng)操作事情發(fā)生的時刻,對象會發(fā)射一個信號(signal);而槽(slot)則 是一個函數(shù)接納特別指定信號況且運行槽本身設(shè)置的動作。信號與槽之間,則經(jīng)過 QObject 的靜態(tài)辦法 connect 來鏈接。
例如:
connect(ui.pushButton_close, SIGNAL(clicked()), this, SLOT(closeSlot()));
當(dāng)關(guān)閉按鍵被點擊時,會被觸動引發(fā) QPushButton 的 clicked()信號,信號被發(fā)射在這以后, 會連署到收繳者定義的槽函數(shù)中,這處是 closeSlot();
信號在不論什么運行點上皆可發(fā)射,甚至于可以在槽里再發(fā)射另一個信號,信號與槽的鏈接不框定為一對一的鏈接,一個信號可以鏈接到多個槽或多個信號鏈接到 同一個槽,甚至于信號也可連署到信號。
信號與槽機制也保證了低耦合性,送出信號的類并不曉得是哪一個槽會接納, 也就是說一個信號可以調(diào)配使用全部可用的槽。此機制會保證當(dāng)在”連署”信號和槽時, 槽會接納信號的參變量況且準(zhǔn)確運行。
這處,我想談的是 Qt 總算創(chuàng)造了 signal/slot,這個思想也被其它一點框架語 言吸收了。
談 signal/slot 之前先來談?wù)?C++的缺欠,這處只談一點兒,C++的預(yù)設(shè)目的是面 向?qū)ο笳Z言,它不止供給了對象的定義和構(gòu)建的形式,也定義了對象間的關(guān)系, 譬如 秉承 分化 聚合,不過它沒有供給對象間通信和共享數(shù)值的形式,這個缺 點在普通手續(xù)的研發(fā)上不算個大問題,我們可以自個兒簡單成功實現(xiàn),不過對于 GUI 研發(fā),這個欠缺就被放大了眾多倍。GUI 上的對象真的非常多,窗戶是對象,布局 是對象,定時器是對象,并且對象間有縱橫交錯的關(guān)系,通信和數(shù)值交換十分次數(shù)多,譬如按鍵按下要通告父窗戶或器皿對象,骨碌條變動了要通告列表對象。這 種數(shù)目極大的對象以及復(fù)雜的通信關(guān)系,可不是自個兒搞個簡單的成功實現(xiàn)就能解決的。
說到通信和共享,實際上它們是一回事,共享很很長時間候就是為了通信,而 C++ 里要通信就定然要共享。
譬如,一個類實際的例子領(lǐng)有另一個的指針,就可以過訪對方的數(shù)值,調(diào)配使用對方的 辦法了,這實際就是共享了一個指針,這個類指針也是另一個對象的 this。過訪 數(shù)值和調(diào)配使用辦法實際上都是通信,把對方的數(shù)值拿過來,把自個兒的數(shù)值送以往,交 換數(shù)值就是通信。
在 C++里,因為沒有 GC,管理數(shù)量多原生指針曲直常危險的,對象的性命周期 不可以控,野指針的顯露出來幾率會頎長,大型 C++ 的 GUI 項目參加研發(fā)的人次很多, 很保不住證都不犯錯。
那末發(fā)消息兒好不好呢?譬如 MFC 那樣子,可以,不過實質(zhì)上仍然共享了窗戶句 柄,否則消息兒發(fā)給誰呢?并且還帶來額外的問題,就是類型安全,消息兒的參變量是 沒有辦法類型安全的。
Qt 作為大型 GUI 項目標(biāo) Framework,它務(wù)必解決這個問題,否則這個手續(xù)是 寫半大的,寫大了便會問題接連不斷。
來看一段代碼,看看 Qt 的解決方案: Window::Window()
{
QPushButton *b = new QPushButton(this);
connect(b, SIGNAL(clicked()), SLOT(on_button_clicked())); }
Window::on_button_clicked() {
QPushButton *b = qobject_cast<QPushButton*>(sender());
b->setText("clicked!"); }
這段代碼,經(jīng)過 Qt 的 signal slot 機制,把 QPushButton 的點擊事情連署到達(dá) Window 的 on_button_clicked 響應(yīng)函數(shù)上。
3
布局管理
布局管理類用于描寫一個應(yīng)用手續(xù)的用戶界面中的Widget是怎么樣安放。當(dāng)視窗縮放時,布局管理器會半自動調(diào)試 widget 的體積、位置或是字號,保證它們相 對的排列和用戶界面群體還是持有可用性。
Qt 內(nèi)置的布局管理類型有:QHBoxLayout、QVBoxLayout,QGridLayout 和 QFormLayout。這些個類秉承自 QLayout,但 QLayout 非秉承自 QWidget 而是直接 源于 QObject。它們負(fù)責(zé) widget 的幾何管理。想要開創(chuàng)更復(fù)雜的版面配備布置,可以 秉承 QLayout 來自定義版面配備布置管理員。
上圖中被紅框圈起來的,是頁面中的布局,布局可以用手寫,我們這處只展覽預(yù)設(shè) 師中處置的布局。布局分為四種,我們這處用到達(dá)簡單的兩種,橫向布局 (QHBoxLayout)向布局(QVBoxLayout)。
如上所述圖所示。
到這處截止,只紹介了 qt 的一點基本的初步學(xué)會知識,大家經(jīng)過 qt 的界面文件 中的布局和信號處置,就可以完成一個簡單的 Qt 小手續(xù)啦!