天天看點

Qt内置控件概覽

 本文選自 《C++ GUI 程式設計》第二版 2.6章

Qt提供了大量的内建控件及通用對話框可滿足程式員的絕大部分要求。本節中我們将對這些控件和對話框作一個大概的介紹。我們将在後面的章節中對部分控件作詳細介紹:在第三章将介紹QMenuBar,QToolBar和QStatusBar等主視窗控件,在第六章中将介紹QSplitter和QScrollArea等布局類控件。大部分的内建控件和對話框都将在本書的例子中涉及。2.17至2.26的截圖中控件均為KDE3 Plastique風格。

圖2.17 Qt按紐控件

Qt内置控件概覽

圖2.18 Qt單頁容器控件

Qt内置控件概覽

圖2.19 Qt多頁容器控件

Qt内置控件概覽

圖2.20 Qt 項目檢視控件

Qt内置控件概覽

圖2.21 Qt顯示控件

Qt内置控件概覽

圖2.22 Qt輸入控件

Qt内置控件概覽

圖2.23 Qt回報對話框

Qt内置控件概覽

圖2.24 Qt顔色和字型對話框

Qt内置控件概覽

圖2.25 Qt檔案和列印對話框

Qt内置控件概覽

圖2.26 Qt向導對話框

Qt内置控件概覽

如圖2.17, Qt提供了四種“按紐”:QPushButton, QtoolButton, QcheckBox和 QRadioButton。QPushButton和QToolButton一般執行某個動作,但也可用作觸發按紐。QCheckBox一般用來提供多選項,而QRadioButton常用于提供單選項。

Qt容器類控件是指可容納其他控件的控件,如圖2.18和圖2.19所示。QFrame可畫些簡單的圖形,也可作為其他控件的基類,如QToolBox,QLabel等。

QTabWidget和QToolBox是多頁控件,每一頁均為一個子控件,且從0開始計數。在QTabWidget中,Tab控件的形狀和位置均可設定。

如圖2.20的内容顯示控件一般用于大量資料的顯示,常使用滾動條。滾動條機制由QAbstractScrollArea繼承而來,後者為内容顯示控件及其他一些可使用滾動條控件的基類。

Qt内建了一種格式化文本引擎可顯示和編輯格式化文本,此引擎支援字型顯示,對齊,清單,表格,圖像,超連結等功能,支援HTML格式。此引擎支援的HTML标簽和CSS屬性詳細資訊請參見:http://doc.trolltech.com/4.3/richtext-html-subset.html。

Qt提供了若幹控件專門用于顯示資訊,如圖2.21所示。QLabel是其中最為重要的一種,可用于顯示純文字,HTML,圖像資訊等。

QtextBrowser是一種隻讀QTextEdit子類,用于顯示格式化文本。與QLabel不同,此類型可顯示大規模格式化文檔,并可自動添加滾動條,提供滑鼠及鍵盤導航功能。4.3版本的Qt助手便是用QTextBrowser寫成的。

如圖2.22,Qt提供了若幹用于輸入的控件。QLineEdit允許使用屏蔽字元或校驗器對輸入字元進行限制,兩種方式也可同時使用。QTextEdit是QAbstractScrollArea的派生類,可用于編輯大規模的純文字或是格式化文本,在編輯格式化文本時,它可顯示所有Qt格式化文本引擎所支援的元素。QLineEdit和QTextEdit均與系統剪貼闆完美內建。

如圖2.23,Qt提供了若幹标準消息框和錯誤對話框,并記錄其顯示的消息内容。操作進度可由QProgressDialog或圖2.23所示的QProgressBar進行模拟。在需要輸入一行文本或是一個數字時,使用QInputDialog非常友善。

如圖2.24和2.25,Qt提供了一組标準對話框以友善選取顔色,字型和方件,或是進行列印。

在windows和Mac OS X系統上,Qt會盡可能的使用本地風格對話框,同時顔色和字型也都可以利用Qt機制自定義。

最後,利用QWizard可友善快捷的建立向導(Mac上稱作助手)。向導常用于幫助使用者完成複雜或是很少用到的操作,圖2.26為一個向導示例。

内建控件和對話框提供了大量通用功能,通過修改控件屬性或是建立信号/槽聯接,自定義槽函數等方式我們還可實作自定義功能。

如果Qt内建的控件和對話框還不能滿足你的要求,那可以考慮一下Qt Solutions,或是Qt商業版本,第三方版本等。Qt Solution提供了大量新增的控件,包括顔色選擇器,旋紐,扇形菜單,屬性浏覽器等。

在某些情況下,我們還想建立自己的自定義控件。在Qt中,這也是很友善完成的,且自定義控件與内建控件一樣可直接對Qt中平台無關的繪制函數進行操作,進而使得我們的自定義控件也有着與本地作業系統相同的觀感。自定義控件甚至還可以內建到Qt設計器中,像内建控件一樣使用。在第五章中我們将介紹如何建立自定義控件。