中间穿插了一个资源系统,也是突然有感写的。这篇笔记接着第11章——输入控件继续向下写。本篇笔记总结Qt的显示控件。Qt显示控件有以下几种:
控件名 |
对应类名 |
描述 |
标签 |
QLabel |
显示文字和图片 |
富文本浏览器 |
QTextBrowser |
带有超文本导航的只读文本浏览器 |
图形显示器 |
QGraphicsView |
显示QGraphicsScene图形 |
日历表 |
QCalendarWidget |
通常的日历 |
液晶数字 |
QLCDNumber |
液晶数字显示器 |
进度条 |
QProgressBar |
进度条 |
其他还有一些诸如Item View/Widget等控件,也可以作为显示控件,但它们同时也是输入控件。更重要的是它们是Qt的又一大技术——Model/View 框架。相关的内容会在后面的博客中单独总结。
Label
QLabel标签用于显示文字和图片。不提供用户交互功能,只用于显示。它的显示效果可以多种方式进行配置。QLabel可以显示以下内容:
内容 |
设置方式 |
Plain text |
|
Rich text |
|
A pixmap |
|
A movie |
|
A number |
Pass an int or a double to setNum(), which converts the number to plain text. |
Nothing |
The same as an empty plain text. This is the default. Set by clear(). |
注意,当将一个QString传递给QLabel构造函数或是调用SetText()时,请确保首先明确输入格式。因为Qlabel 会试图猜测文本是纯文本还是富文本(HTML格式)。可以显示调用setTextFormat()函数来设置文本显示格式。
默认情况下,QLabel显示左对齐,垂直居中的文本或图像。可以用setAlignment()函数和setIndent()函数调整内容的位置。文本内容还可以调用setWordWrap()函数设置换行。QLabel继承于QFrame,QFrame的属性和方法也可以用于设置QLabel。
另外,QLabel还有个功能是为其他空间添加快捷键。如下面的代码:
QLineEdit *phoneEdit = new QLineEdit(this);
QLabel *phoneLabel = new QLabel("&Phone:", this);
phoneLabel->setBuddy(phoneEdit);
这会使得用户按下Alt+P键后,鼠标会自动定位到phoneEdit输入框中。同样的应用也可以在Button上,按下某一快捷键时相当于点击了按钮。
Text Browser
QTextBrowser提供了一个带有超文本导航的富文本浏览器。这个类扩展了只读模式下的QTextEdit类,添加了一些导航功能,这样用户就可以跟踪超文本文档中的链接了。对于QTextEdit、QTexrBrowser和QLabel大致应用范围如下:
1.如果想提供一个可编辑的富文本编辑器,那么请使用QTextEdit;
2.如果使用不带超文本导航的文本浏览器,那么使用QTextEdit;
3.如果只需要显示一小段富文本,请使用QLabel。
也即,只读的,带超文本导航的文本浏览器,使用QTextBrowser。
之前的笔记中也谈到了,QTextEdit的内容是通过setHtml()或setPlainText()函数设置的,QTextBrowser除了这两种 外,还具有setSource()函数接口,从而可以使用文档作为源文本。
QTextBrowser提供backword和forward槽函数,用以实现Back和forward按钮操作。home()槽函数将文本设置为第一个文档。
Graphics View
QGraphicsView是一种显示QGraphicsScene对象的显示控件。QGraphicsScene是图形视图框架中的一个类。所以它的输入内容是QGraphicsScene对象,可以通过QGraphicsScene构造函数或者setScene函数设置。调用show函数后,视图将默认滚动到场景的中心并显示可见的内容,比如:
QGraphicsScene scene;
scene.addText("Hello, world!");
QGraphicsView view(&scene);
view.show();
可以拖动滚动条或者centerOn()函数显示滚动到scene上的任何位置。QGraphicsView可用于显示整个场景或是部分场景,第一次显示的时候是自动检测显示区域的。可以通过setSceneRect()函数设置显示区域。通过调用render ()函数默认采用矩形的QPainter绘制和渲染图形,可以通过setRenderHints()函数改变它。默认会提供一个矩形的Widget显示视场,调用setViewport()函数可以替换它。比如通过setViewport(new QGLWidget)函数设置OpenGL视场。
用QTransform类实现一些移动效果,通过setTransform()函数传递一个矩阵,或是调用一些常见的移动函数rotate(), scale(), translate() or shear()。
更加深入的应用须结合QGraphicsScene应用,这里不再展开。
Calendar Widget
QCalendarWidget就是通常意义上的日历。
默认今天的日期会被选中,用户可以用鼠标或键盘选中任意日期。用selectedDate()函数获取选中的日期,也可以通过setDateRange()设置minimumDate and maximumDate属性来限制选择的期限。封装了selectionChanged(), activated() and currentPageChanged()等信号以响应用户的用户操作。
LCD Number
QLCDNumber就是一个液晶数据显示器。这个控件因为很复古,现在已经几乎不用了。
它可以以任意大小显示数字。可以显示十进制、十六进制、八进制和二进制数字。用display()槽函数可以轻松连接数据源。当显示的数字超出了范围后会发送overflow()信号。范围通过setDigitCount函数设置。可以通过value()获取它的值,如果你就像获取显示的文本,可以用display()槽函数链接另一个槽函数来存储它的值。
Progress Bar
QProgressBar是常用的进度条控件。
进度条就是显示一个正在运行的应用的运行进度。通过setMinimum()、setMaximum()设置最小值和最大值以及setValue()设置单步值来设置基本属性,控件就会显示完成的百分比以显示进度。如果最小值和最大值都设置为0,控件会显示忙状态,比如,我们在某些时候并不能知道某些任务运行所需的时间(也即无法确认最小最大值),那就显示忙的状态就好了。