1. 简述
QComboBox 提供了一种以占用最小屏幕空间的方式向用户显示选项列表的方法。QCombox是显示当前项目的选择小部件,可以弹出可选项目的列表。QComBox其实就是一个下拉列表。选择的项目内容就会显示在外面,其他项目会被隐藏,同时在下拉时之前选择的项目位置会被标记好,可以理解显示的项目其实是一个之前选择位置项目的副本。这个控件其实预制很很多选项给用户选择,减少手动输入的麻烦。当然哈,QComBox可以是可编辑的,允许用户修改列表中的每个项目。但是这个不会影响到预先设置项目。
就像下面这种用法,很多能预制的就不要手写啦
这篇博文主要是还是不是使用 model/view 版本的介绍哈。其实就是QComBox的基础简述。
2. 显示内容
QComBox可以包含像素图以及字符串;可以用 insertItem() 和 setItemText() 的相关重置函数来插入带图标的列表项
还可以设置QComBox 可以编辑。对于可编辑的QComBox,提供了函数 clearEditText(),用于清除显示的字符串而不更改QComBox的内容。(其实就是只是修改当前的显示内容,之前预制的项目还是不会被修改的呐)
3. 信号
如果QComBox的当前项发生变化,则发出两个信号,urrentIndexChanged() 和 activated()。无论更改是通过编程方式还是通过用户交互完成的,始终发出 currentIndexChanged(),而 active() 仅在更改由用户交互引起时发出。当用户突出显示QComBox弹出列表中的项目时,将发出 highlighted() 信号。所有三个信号都存在两个版本,一个带有QString参数,另一个带有int参数。如果用户选择或突出显示像素图,则仅发出 int 信号。每当可编辑QComBox的文本发生更改时,都会发出 editTextChanged() 信号。
QComBox的信号表
信号 | 含义 |
---|---|
activated(int index) | QComBox的当前项发生变化,仅在更改由用户交互引起时发出,说那个列表项位置被激活了 |
currentIndexChanged(const QString &text) | combox位置发生后,发生的方式是通过编程方式、或通过用户交互都会触发,携带一个当前项的 text |
currentIndexChanged(int index) | combox位置发生后,发生的方式是通过编程方式、或通过用户交互都会触发,携带一个当前项的 index |
currentTextChanged(const QString &text) | 当选择项的文字和上一次选择项不同是,携带一个当前项的 text |
editTextChanged(const QString &text) | 每当可编辑QComBox的文本发生更改时 |
highlighted(int index) | 就是下拉列表显示的时候,我们可以用 上 下键 移动那个选择的项目时发射这个信号。 |
textActivated(const QString &text) | 这个没用过 |
textHighlighted(const QString &text) | 这个没用过 |
4. 常用功能
当用户在可编辑QComBox中插入新项目(字符串)的时候,还是有一个插入的策略。默认策略是 InsertAtBottom,但您可以使用 setInsertPolicy() 更改此设置。
策略 | 含义 |
---|---|
Constant | Description |
QComboBox::NoInsert | 不会插入 |
QComboBox::InsertAtTop | 顶部插入 |
QComboBox::InsertAtCurrent | 当前项将被替换输入的新字符串 |
QComboBox::InsertAtBottom | 后的字符串将被插入到QCombox中的最后一项。 |
QComboBox::InsertAfterCurrent | 新的字符串插入当前项的后面 |
QComboBox::InsertBeforeCurrent | 新的字符串插入当前项的前面 |
QComboBox::InsertAlphabetically | 按照首字母顺序的插入字符串 |
可以使用 QValidator 将输入限制为可编辑的QComBox;参见 setValidator()。默认情况下,接受任何输入。
QComBox提供了很多好用的功能。
- 可以使用插入单个、多个Item,例如 insertItem() 和 insertItems()
- 可以使用 setItemText() 修改项目
- 可以使用 removeItem() 删除项目
- 可以使用 clear() 删除所有项目
- 当前项的文本由 currentText() 返回,编号项的文本与 text() 一起返回
- 可以使用 setCurrentIndex() 设置当前项
- QComBox中的项目个数由 count() 返回
- 可以使用 setMaxCount() 设置的最大项目数
- 还可以用 setEditable() 是否可编辑 等等
对于可编辑的QComBox,您可以使用 setCompleter() 设置自动补全,就是输入一部分内容,就显示一个可能选择列表,等后面专门用 QCompleter 来完成
5. model/view 使用
QComboBox 使用模型/视图框架作为其弹出列表并存储其项目。默认情况下,QStandardItemModel 存储项目,QListView 子类显示弹出列表。这个我后面会把Model/View和这个连在一起重新梳理下
6. 槽函数
因为信号有些是重载的信号,在槽函数连接的时候就要指定一下是哪个信号,就用的QOverload 函数来指定的就好。
就行下面的 currentIndexChanged 信号在连接时候的使用。
connect(comboBox, QOverload<const QString &>::of(&QComboBox::currentIndexChanged),
[=](const QString &text){ /* ... */ });
connect(comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
[=](int index){ /* ... */ });