qt設(shè)計(jì)是用于進(jìn)行界面美化的,在進(jìn)行設(shè)計(jì)過(guò)程中有著很多事項(xiàng)是需要注意的,這就需要做好充足準(zhǔn)備,確保設(shè)計(jì)順利完成,那么qt ui設(shè)計(jì)方法是什么?下面一起看下吧。
一.創(chuàng)建工程
由于我們要實(shí)現(xiàn)兩個(gè)窗口之間的互相切換,故我們要?jiǎng)?chuàng)建兩個(gè)類(lèi)。首先建立工程以及第一個(gè)類(lèi):
打開(kāi)Qt creater, File->New file or project,project選擇applications,右邊目錄選擇Qt GUI Application,下一步后為工程命名,這里我們就命名calculator,下一步選擇編譯及調(diào)試工具,再下一步選擇窗口類(lèi)型,這里就選擇QMainWindow吧,類(lèi)的命名為calculator,注意勾選Generate Form,這樣工程中才會(huì)有ui界面,最后一步不管,直接finish。至此,我們已經(jīng)完成了工程及第一個(gè)類(lèi)的創(chuàng)建。
下面創(chuàng)建第二個(gè)類(lèi)。之前說(shuō)過(guò),相關(guān)書(shū)籍和博客上普遍都是采用代碼的形式來(lái)創(chuàng)建第二個(gè)類(lèi)的,相當(dāng)?shù)穆闊?。這里我們利用圖形化界面直接創(chuàng)建第二個(gè)類(lèi):右鍵工程名calculator,選擇Add New,在彈出的對(duì)話框中,F(xiàn)iles and Classes選擇Qt,右邊選擇Qt Designer Form Class,下一步的模板就選擇MainWindow吧。下一步命名extendedwindow,最后一步finish。至此我們就創(chuàng)建了工程中的第二個(gè)類(lèi)。接著,在main.cpp包含頭文件“extendedwindow.h”并定義新的對(duì)象e——extendedwindow e;是不是比用代碼創(chuàng)建方便很多啊。
完成以上步驟后,你的projects欄中應(yīng)該有如下的樹(shù)形圖界面——
二.利用ui界面完成界面的設(shè)計(jì)
先編輯第一個(gè)窗口即calculator這個(gè)窗口,雙擊calculator.ui進(jìn)入圖形化設(shè)計(jì)界面,從左邊的控件欄中找到containers下的tab widget,把他拖出來(lái)放到界面中,再拖出兩個(gè)Line Edit和一個(gè)Text Browser以及一個(gè)Lable到tab widget的第一個(gè)tab中,右上角有一個(gè)樹(shù)形圖欄記錄著當(dāng)前窗口中的對(duì)象和類(lèi),在這里修改創(chuàng)建的對(duì)象的名字,提高可讀性(如圖)。
接著利用界面上方的對(duì)齊工具進(jìn)行對(duì)齊(如圖)
第二個(gè)標(biāo)簽里的內(nèi)容也同樣操作。每個(gè)控件的大小可以通過(guò)拖動(dòng)改變。最后再拖動(dòng)一個(gè)push button到tab widget控件外部。最終的效果圖如之前展示的界面一所示。
完成了第一個(gè)窗口的設(shè)計(jì),接下來(lái)完成第二個(gè)窗口的設(shè)計(jì)。需要用到的控件是text browser和push button,過(guò)程這里就不說(shuō)了。
qt ui設(shè)計(jì)(圖片來(lái)自網(wǎng)絡(luò))
三.功能的實(shí)現(xiàn)
Qt各對(duì)象之間的通信是通過(guò)信號(hào)與槽來(lái)實(shí)現(xiàn)的。故不要想著用對(duì)象a去訪問(wèn)對(duì)象b的私有成員。帶參數(shù)的信號(hào)完全可以實(shí)現(xiàn)數(shù)據(jù)的傳遞。信號(hào)與槽機(jī)制的特點(diǎn)就是可以使得對(duì)象在彼此完全不了解的情況下將他們的行為聯(lián)系起來(lái)。對(duì)于這句話的理解是:各個(gè)類(lèi)在定義時(shí)完全不需要考慮他與其他類(lèi)可能會(huì)有什么聯(lián)系,各自定義各自的即可。當(dāng)需要把幾個(gè)對(duì)象聯(lián)系起來(lái)的時(shí)候,臨時(shí)寫(xiě)一句connect就可以達(dá)成目的。
由于本文的重點(diǎn)在于介紹通過(guò)ui圖形化界面實(shí)現(xiàn)界面的設(shè)計(jì),對(duì)于計(jì)算器計(jì)算的相關(guān)內(nèi)容就不進(jìn)行敘述了,相關(guān)代碼將在最后貼出。這個(gè)部分我們只講下對(duì)象是怎么通過(guò)信號(hào)與槽來(lái)進(jìn)行通信的:
3.1控件對(duì)象與窗口對(duì)象之間的通信
選中tab1中的上方的那個(gè)line edit,右鍵,選擇go to slot,接著會(huì)彈出一個(gè)對(duì)話框,里面是各種類(lèi)型的line edit所屬的QLineEdit類(lèi)中的信號(hào)成員。通過(guò)這些信號(hào)的名字就可以猜到它的功能,如editingFinished(),它表示如果用戶(hù)對(duì)這個(gè)行輸入框的操作結(jié)束了(包括失去焦點(diǎn)和回車(chē)這兩種形式),則行輸入框這個(gè)對(duì)象將發(fā)射這個(gè)信號(hào)。
這里我們選擇textEdited(),則界面自動(dòng)跳到calculator.cpp文件,并且這個(gè)文件中已經(jīng)自動(dòng)創(chuàng)建了一個(gè)槽函數(shù)
void calculator::on_number1_textEdited(const QString &arg1)
經(jīng)過(guò)觀察,我們發(fā)現(xiàn)這是一個(gè)屬于calculator類(lèi)的槽函數(shù)。事實(shí)上,如果你現(xiàn)在打開(kāi)calculator.h文件,你會(huì)發(fā)現(xiàn)Qt creater已經(jīng)自動(dòng)幫你在類(lèi)的定義中加上了剛剛那個(gè)槽函數(shù)。除此之外,軟件還自動(dòng)幫你完成了這兩個(gè)對(duì)象信號(hào)與槽的連接并將這段代碼隱藏了起來(lái)(具體在哪不知道)。當(dāng)你編輯行輸入框時(shí),信號(hào)被發(fā)送給calculator定義的對(duì)象的槽,槽函數(shù)執(zhí)行特定的功能。需要強(qiáng)調(diào)的是,函數(shù)
QObject::connect ( const QObject * sender, const char* signal, const QObject * receiver, const char* member )
的第一個(gè)參數(shù)和第三個(gè)參數(shù)是對(duì)象的地址而不是類(lèi)的地址。而窗口對(duì)應(yīng)的對(duì)象的定義是在main.cpp中進(jìn)行的
calculator w;
參數(shù)寫(xiě)法應(yīng)是&number1(number1是我對(duì)那個(gè)行輸入框的命名,可在右上角的樹(shù)形圖欄中查看)和&w。這里要通過(guò)第一個(gè)輸入框讀取得到的數(shù)(字符型),在槽函數(shù)中寫(xiě)如下代碼:
QString n1=ui->number1->text(); num1=n1.toDouble();
需要解釋的是:
?、伲?/span>
這里的ui代表的就是caltulator.ui這整個(gè)圖形化界面。它的定義在頭文件calculator.h里面,它是類(lèi)calculator的一個(gè)成員
private: Ui::calculator *ui;
可見(jiàn),ui是指向類(lèi)calculator對(duì)象的一個(gè)指針。利用它可以對(duì)ui圖形化界面里的控件方便地進(jìn)行訪問(wèn)。具體方法為ui->…。(ui后輸入小數(shù)點(diǎn)“.”,軟件會(huì)自動(dòng)改成->)。細(xì)心的人可能會(huì)發(fā)現(xiàn),calculator.h和extendedwindow.h中都有ui,而各cpp文件中也都有ui,他們指向不同的對(duì)象,編譯器卻沒(méi)報(bào)錯(cuò)。具體原因我也不知道,總之利用他們可以訪問(wèn)各自的圖形化界面。
②:
通過(guò)輸入框得到的內(nèi)容是字符型的,故還需要用所示代碼將其轉(zhuǎn)換成double型數(shù)據(jù)。函數(shù)定義可在Qt Assistant中查找。
3.2 兩個(gè)窗口對(duì)象之間的通信
兩個(gè)窗口之間的通信需要我們手動(dòng)去寫(xiě)所有的代碼。思路如下:在類(lèi)calculator和extendedWindow中各定義一個(gè)信號(hào)和槽函數(shù)(帶不帶參數(shù)視情況而定),用于他們之間的通信。在主函數(shù)中將兩組信號(hào)與槽聯(lián)系起來(lái)。通過(guò)軟件自動(dòng)建立的連接,讓窗口一中按鈕對(duì)象與類(lèi)calculator對(duì)象w通信,槽函數(shù)收到信號(hào)后,隱藏第一個(gè)窗口,再讓其主動(dòng)發(fā)送信號(hào)給類(lèi)extendedwindow對(duì)象e,讓第二個(gè)窗口顯示出來(lái)。
qt ui設(shè)計(jì)(圖片來(lái)自網(wǎng)絡(luò))
以上是本文關(guān)于qt ui設(shè)計(jì)的具體介紹,qt ui設(shè)計(jì)是非常專(zhuān)業(yè)的一個(gè)過(guò)程,在設(shè)計(jì)過(guò)程中需要使用到各種代碼和手段,這就需要做好充足準(zhǔn)備保證設(shè)計(jì)效果。