Qt输入控件由各类box和edit组成。具体包括:
控件名 |
对应类名 |
描述 |
下拉列表 |
QComboBox/QFontComboBox |
提供下拉列表供用户选择 |
单行文本编辑框 |
QLineEdit |
单行可输入文本编辑 |
多行文本编辑框 |
QTextEdit/QPlainTextEdit |
多行可输入文本编辑 |
数值输入框 |
QSpinBox |
用于整数的显示和输入 |
数值输入框 |
QDoubleSpinBox |
用于浮点数的显示和输入 |
时间日期选择控件 |
QTimeEdit/QDateEdit/QDateTimeEdit |
时间和日期选择和显示 |
表盘 |
QDial |
表盘式数值输入 |
滚动条 |
QSlider |
通过滑动设置数值 |
卷滚条 |
QScrollBar |
同QSlider类似,可以作用于卷滚区域 |
下拉菜单
下拉菜单包括QComboBox/QFontComboBox两种。前者是通用的下拉菜单,后者是字体选择的下拉菜单,类似于word中的字体选择框。
QComboBox 提供一个下拉列表供用户选择,显示当前选择的项,也可以pop up所有可选择的项。combobox也可以被编辑,允许用户编辑下拉列表中的项。下拉列表中既可以包含图片也可以包含文字。insertItem() 和 setItemText()函数可以对上述对象进行自适应调用。对于可编辑的combobox, clearEditText()函数可以清除显示的内容但并不改变下拉列表的实际内容。
combobox内容变化将触发两个信号:currentIndexChanged() 和 activated()。currentIndexChanged() 通常被触发忽略变化是否被程序或者用户完成,而activated()仅在用户完成时触发。而且,前者传递当前索引号,后者传递当前项的文字。 highlighted() 信号是在用户高亮下拉列表中的项时触发. 只要可编辑的combobox文件发生改变则会触发editTextChanged()信号。当用户输入了一个新的字符串,combobox将可能会插入列表中。默认会插入最低下,但是可以通过setInsertPolicy()设置插入的位置。
用insertItem() 和 insertItems()插入项,用setItemText()改变项的内容。用 removeItem()删除某个项,用clear()清除所有项。用 currentText()获取当前项的内容, 用setCurrentIndex()设置当前项的目录。用count()获取项的数量。用setMaxCount()设置项的数量上限。 用setEditable()设置可编辑。
QComboBox使用model/view framework显示和保存列表. model/view framework技术将在后续总结中介绍。
文本编辑框
文本编辑框主要包括QLineEdit,QTextEdit和QPlainTextEdit。
QLineEdit是单行文本编辑器。
line edit可以让用户输入单行文本,并支持重复,撤销,剪切和粘贴等常见编辑功能。通过改变echoMode(),可以设置其为只写模式,如密码输入框。
可以通过maxLength()限制文本的最大长度,用setText() 或者 insert()改变内容。用text()获取内容。用setSelection() 或者 selectAll()选中文本,选中的文本可以被cut(), copy()和 paste(). 通过setAlignment()设置文本对齐方式。
当文本发生变化时,将触发 textChanged()信号。鼠标移动 cursorPositionChanged()信号被触发。返回或者enter按键按下,returnPressed() 信号被触发。当输入完成,或者失去focus,或者按下了 Return/Enter按钮,editingFinished()信号被触发。
QTextEdit是一个所见即所得的可以编辑带格式文本的文本编辑器,以HTML格式标记符定义格式。它可以显示大量文本并且具有快速响应输入的优点。
QTextEdit处理段落和字符。段落是一个格式化的字符串,并被包装为适应控件的宽度。默认情况下,当读取纯文本时,一个换行符表示一个段落。文档由0个或多个段落组成。段落中的字符根据段落的对齐方式对齐。段落中的字符都有自己的属性,比如字体和颜色。
另外,QTextEdit还可以显示图像、列表和表格。如果显示的内容太大而超过了edit的可视区域,则会出现scroll bars. 如果你只想显示一小段文字,建议使用QLabel。所以,QTextEdit不仅具有输入控件的功能,同时也具有显示控件的功能。
可以用setHtml()函数设置文本,它将用其传递的参数替换原有文本。删除文本可以用clear()函数。文本本身的插入可以用QTextCursor类的功能,或者用insertHtml(), insertPlainText(), append()或者paste()函数。QTextCursor支持插入表格和列表等复杂内容,该类还具有文本选中操作等功能。find()函数用以寻找和选择某一字符串。setFontItalic(), setFontWeight(), setFontUnderline(), setFontFamily(), setFontPointSize(), setTextColor() 和 setCurrentFont()用以设置字符属性,setAlignment()用以设置文本对其方式。QTextEdit还有一个QTextDocument对象,可以使用文档的功能。用document()来返回该对象,进而进行编辑。也可以用setDocument()设置该对象。当文本发生变化时会驱动textChanged()信号。
这里附一个LineEdit的例子,大家可以移步本人下载频道下载:LineEditExample
时间日期
时间日期输入控件包括QTimeEdit/QDateEdit/QDateTimeEdit。
顾名思义,它是一个可以编辑或显示时间和日期的控件。QTimeEdit和QDateEdit是QDateTimeEdit的派生类,前者只用于时间,后者只用于日期。
QDateTimeEdit *dateEdit = new QDateTimeEdit(QDate::currentDate());
dateEdit->setMinimumDate(QDate::currentDate().addDays(-365));
dateEdit->setMaximumDate(QDate::currentDate().addDays(365));
dateEdit->setDisplayFormat("yyyy.MM.dd");
上述代码将新建一个用今天日期初始化的QDateTimeEdit对象。并指定了有效日期范围为去年到明年,显示格式为yyyy.MM.dd。QDateTimeEdit最小的时间是1752年9月14 日,也可以用setMinimumDate()修改它,QDate的最小值为公元前4713年1月2 日。
QDateTimeEdit可以用QCalendarWidget设置日期,setCalendarWidget()函数可以用于设置关联的QCalendarWidget。
数值输入
数值输入控件有QSpinBox和QDoubleSpinBox。后者支持double类型数值。
QSpinBox除了可以直接输入数值以外,还支持点击右侧的三角按钮来增加或减小数值。每一次的数值改变都会触发两个valueChanged()信号,一个是int形参一个是QString形参。通过setMinimum(), setMaximum() 和 setSingleStep()来设置最小值最大值和递增值。
这里附一个spinbox的例子,大家可以移步本人下载频道下载:SpinBoxExample:
滑块
Slider滑块控件包括QDial、QSlider、QScrollBar等。它们的共同点是通过拖动控件以控制不同的数值,前提是数值已经有一定的范围。
这三个类都继承于QAbstractSlider,所以他们几乎具有相同的signals, slots 和 成员函数。
Signal |
Description |
Emitted when the slider's value has changed. The tracking() determines whether this signal is emitted during user interaction. |
|
Emitted when the user starts to drag the slider. |
|
Emitted when the user drags the slider. |
|
Emitted when the user releases the slider. |
这里附一个slider的例子,大家可以移步本人下载频道下载:SliderExample。