項偉
摘 要: Qt作為一個跨平臺的C++圖形用戶界面(GUI)應用程序開發工具,在Linux系統中得到了廣泛的應用。在使用Qt開發GUI應用程序時,經常需要設計和實現對話框窗口。在闡述了Qt特性、Linux Qt4環境搭建方法及Qt4標準對話框與自定義對話框的區別的基礎上,介紹了用Qt4布局管理器實現用戶界面的相關技術,分析了用Qt4設計自定義對話框的基本流程,完成了自定義對話框的設計與實現。
關鍵詞: Qt; Linux Qt4; 對話框; 自定義對話框; 布局管理器
中圖分類號:TP316.2 文獻標志碼:A 文章編號:1006-8228(2017)09-27-03
Abstract: Qt, as a cross-platform C++ graphical user interface (GUI) application development tool, has been widely used in Linux system. It is often necessary to design and implement the dialog window when developing GUI applications using Qt. The article expounds the characteristics of Qt and the method of setting up Linux Qt4 developing environment, and describes the difference between the Qt4 standard dialog and the custom dialog. On this basis, the article introduces the related technologies of using Qt4 layout manager to implement the user interface, analyzes the basic process of using Qt4 to design custom login dialog, and completes the design and implementation of custom dialog box.
Key words: Qt; Linux Qt4; dialog; custom dialog; layout manager
0 引言
Qt是由奇趣科技開發的跨平臺C++圖形用戶界面應用程序開發框架,它提供給應用程序開發者建立藝術級的圖形用戶界面所需的所有功能,既可以開發GUI程序,也可用于開發非GUI程序。Qt是一種面向對象的框架,使用特殊的代碼生成擴展(稱為元對象編譯器)以及一些宏,易于擴展,并且允許真正地組件編程[1]。
Linux是一款開源的多用戶多任務操作系統[2],它是由全世界各地的成千上萬的程序員借助于internet網絡努力實現的UNIX類操作系統,以高效性和靈活性著稱,又由于它是免費獲得的,因此,現在越來越多的用戶選擇使用Linux操作系統。Linux在市場上有許多發行版本,所有的版本都包含一樣的Linux內核、基本工具和應用[3],主流的發行版有Ubuntu、Fedora、Red Hat等。
1 Linux Qt4環境搭建
開發Qt程序需要在Linux中安裝Qt,也就是在Linux系統下搭建Qt環境,用于在計算機上開發Qt應用程序。下面,筆者以在Ubuntu下安裝Qt4進行操作。
1.1 Qt4安裝
在Linux下安裝應用軟件最常用的操作方法就是在線在官網上下載軟件安裝包,用Linux命令進行安裝。因此,安裝Qt4需在官網(http://www.qt.io/download-open-source/)上免費獲取Qt的源碼包(以qt-everywhere-opensource-src-4.7.4.tar.gz為例),然后,將源代碼庫編譯出所需要的Qt工具以及庫文件。在編譯之前,需要確保當前計算機的Linux系統已經安裝了gcc、make等編譯工具,具體操作步驟如下。
⑴ 將壓縮包下載到某個路徑(/usr)下解壓。
tar xzvf qt-everywhere-opensource-src-4.7.4.tar.gz
⑵ 將目錄切換至解壓好的文件下。
cd qt-everywhere-opensource-src-4.7.4
⑶ 運行文件夾下的./configure,生成配置文件。在安裝過程中選擇開源(O)、YES選項。安裝過程中會存在各種問題,需要及時解決,如:
安裝g++、make:sudo apt-get install g++ make
安裝libx11包:sudo apt-get install libx11-dev libxext-dev libxtst-dev
⑷ 運行make,會出現錯誤,需要安裝libxrender-
dev庫解決此錯誤。
⑸ 運行make install。
經過以上五個步驟,Qt默認安裝到/usr/local/Trolltech/Qt-4.7.4目錄中。
1.2 Qt4在Ubuntu下的配置
為了使用者在以后Qt開發中能更方便地使用Qt提供的qmake,moc等工具,需要把Qt的安裝路徑添加到PATH變量里,其具體操作步驟如下:
⑴ 用文本編輯器打開~/.bash_profile(此文件在當前用戶的主目錄下),在文件中添加:endprint
PATH=/usr/local/Trolltech/Qt-4.7.4/bin
export PATH
⑵ 修改完成后保存文件,運行以下命令使設置有效。
source ~/.bash_profile
⑶ 運行echo $PATH,查看添加的路徑是否正確[4]。
1.3 Qt源程序的編譯
將Qt4在Linux操作系統下配置完好后,使用者就可以在任意目錄下編譯Qt程序了,其編譯過程如下。
⑴ 運行qmake -project,將所有的文件編譯成一個與平臺無關的工程文件。
⑵ 運行qmake,讀取本身的Qt設置,生成與庫一致的相應的Makefile。
⑶ 運行make,根據生成的Makefile,將文件編譯為二進制可執行程序。
2 Qt4布局管理器
對于一個GUI用戶界面來說,合理地安排每一個窗口子部件是很必要的,而在Qt程序設計界面中的部件不能夠自動進行有序的排列,需利用Qt提供的絕對位置、手工布局、布局管理器3種方式確定窗口子部件的大小和位置。其中布局管理器是Qt界面程序開發中管理窗口子部件最好的方法,也是最實用的方法。
常用的布局管理器有:
⑴ 水平布局管理器QHBoxLayout,用于水平方向上從左到右組織管理窗口子部件;
⑵ 垂直布局管理器QVBoxLayout,用于垂直方向上從上到下組織管理窗口子部件;
⑶ 網格布局管理器QGridLayout,按二維的網格形式組織管理窗口子部件[5]。
在Qt下實現界面的設計,其實就是充分利用上面三種布局管理器來將窗口部件進行分類和排列。設計時先根據排列的效果創建對應布局管理器的布局對象,然后使用addWidget()方法,將部件添加至布局,并使用setLayout()方法把該布局管理器設置為窗口的布局管理器。
比如,若想使二個QPushButton按鈕部件從左到右均勻顯示,就使用QHBoxLayout水平布局管理器創建布局對象hLayout,再將這2個QPushButton按先后次序添加到hLayout布局中,效果如圖1所示。若想使二個QPushButton按鈕部件從上到下均勻顯示,就使用QVBoxLayout垂直布局管理器創建布局對象vLayout,再將這二個QPushButton按先后添加到vLayout布局中,效果如圖2所示。若想使二個QPushButton按鈕不均勻顯示,就使用QGridLayout網格布局管理器創建布局對象gLayout,再將這二個QPushButton分別按照其占行數、列數,位于幾行幾列等要素添加到gLayout布局中,效果如圖3所示。若想使多個部件排列成更復雜的布局,如圖4所示,可以采用在一個布局里嵌入另一個布局,在布局中使用addLayout()方法來添加布局,內部的布局就會變成它的子布局。針對圖4的效果,可以先將粗虛線范圍的部件設置為垂直布局管理器QVBoxLayout布局,再將細實線范圍的部件設置為水平布局管理器QHBoxLayout布局,向QVBoxLayout布局中添加一個文本框部件和一個QHBoxLayout布局(也就是QHBoxLayout布局變成QVBoxLayout布局的子布局),向QHBoxLayout布局中添加二個QPushButton按鈕部件。
總之,無論設計多么復雜的界面,我們都可以綜合選用水平布局管理器QHBoxLayout、垂直布局管理器QVBoxLayout、網格布局管理器QGridLayout來實現。
3 Qt4標準對話框與自定義對話框
對話框是一種特殊的窗口,一般用來給用戶提供反饋信息或者從用戶接收輸入信息,從而在用戶和應用程序之間建立起交互的平臺,在各種軟件的使用中都會涉及,因此,能夠靈活設計形形色色的對話框是非常重要的。
QDialog是所有Qt對話框窗口的基類,它繼承自QWidget[6]。當然,在Qt4中不僅提供了文件對話框QFileDialog、顏色對話框QColorDialog、字體對話框QFontDialog等常用的內建對話框,還提供了消息對話框QMessageBox。設計者可以采用#include
4 Qt4自定義對話框設計與實現
我們以圖5的登錄對話框為例進行Qt4自定義對話框的分析與設計。
4.1 自定義對話框的總框架
登錄對話框窗口是展現給用戶操作的界面,設計成由二個標簽框QLabel、二個文本框QLineEdit、二個命令按鈕QPushButton三種類型的部件構成;通過單擊二個命令按鈕QPushButton分別實現登錄和退出功能。
4.2 自定義對話框的算法
根據以上分析,創建login.h程序文件,定義繼承QDialog類的Login用戶類,該類具有二個標簽框QLabel、二個文本框QLineEdit、二個命令按鈕QPushButton這六個屬性,loginClick()、exitClick()二個成員方法與一個loginInit()構造函數。
創建login.cpp程序文件,編寫實現loginInit()、loginClick()、exitClick()功能代碼。其中,loginInit()構造函數完成六個部件的屬性值設置與利用Qt布局管理器技術實現Login用戶類中六個部件的組織排列及其它,登錄對話框整體是垂直布局QVBoxLayout組織,它由添加二個標簽框QLabel、二個文本框QLineEdit的網格布局QGridLayout和二個命令按鈕QPushButton的水平布局QHBoxLayout形成。
5 結束語
本文研究了在Linux系統下使用Qt4編程工具開發自定義對話框的基本流程與設計方法,以及實現的主要技術,并將其應用到登錄對話框中,實現了在Linux Qt4下開發用戶滿意的自定義對話框。實踐表明,該系統設計方案是行之有效的,其設計簡潔,界面友好,功能完善。同時,Qt的優良特性保證了本系統高效性和跨平臺性。
今后在實際應用中,還可以對程序進行改進,將對話框窗口部件排列進行優化處理,增強用戶體驗性。
參考文獻(References):
[1] 百度.Qt的定義[EB/OL].2016-06-17.https://baike.so.
com/doc/2150643-2275491.html
[2] 劉金鵬.linux入門很簡單[M].清華大學出版社,2012.
[3] 王麗潔.嵌入式Linux的圖形界面技術研究與實現[D].國防科
技技術大學碩士學位論文,2006.
[4] 道客巴巴.嵌入式圖形界面Qt-Linux編譯環境搭建工作
[EB/OL].2013-03-08.http://www.doc88.com/p-
8179991960600.html
[5] 韓少云,奚海蛟,諶利.嵌入式Linux的Qt圖形程序實戰開發[M].
北京航空航天大學出版社,2012.
[6] 沙祥.嵌入式系統與Qt程序開發[M].機械工業,2017.