天天看点

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设计器中,像内建控件一样使用。在第五章中我们将介绍如何创建自定义控件。