一、描述
QComboBox 提供了一种以占用最少屏幕空间的方式向用户呈现选项列表的方法。
QComboBox 为其弹出列表使用模型/视图框架并存储其项目。默认情况下,QStandardItemModel 存储项目, QListView 子类显示弹出列表。可以直接访问模型和视图(使用 model() 和 view()),但 QComboBox 还提供设置和获取项目数据的功能(例如,setItemData() 和 itemText())。还可以设置新模型和视图(使用 setModel() 和 setView())。对于组合框标签中的文本和图标,使用具有 Qt::DisplayRole 和 Qt::DecorationRole 的模型中的数据。请注意,不能更改 view() 的 SelectionMode。
二、类型成员
1、enum QComboBox::InsertPolicy:此枚举指定当用户输入新字符串时 QComboBox 应该做什么。
- NoInsert:字符串不会插入组合框。
- InsertAtTop:字符串将作为组合框中的第一项插入。
- InsertAtCurrent:当前项目将被字符串替换。
- InsertAtBottom:字符串将插入组合框中的最后一项之后。
- InsertAfterCurrent:在组合框中的当前项目之后插入字符串。
- InsertBeforeCurrent:在组合框中的当前项目之前插入字符串。
- InsertAlphabetically:字符串按字母顺序插入组合框中。
2、enum QComboBox::SizeAdjustPolicy:此枚举指定当添加新内容或内容更改时 QComboBox 的大小提示应如何调整。
- AdjustToContents:组合框将始终根据内容进行调整
- AdjustToContentsOnFirstShow:组合框将在第一次显示时调整其内容。
- AdjustToMinimumContentsLengthWithIcon:组合框将调整为 minimumContentsLength 加上图标的空间。 出于性能原因,应在大型模型上使用此策略。
三、属性成员
1、【read-only】count : const int
组合框中的项目数。
2、【read-only】currentData : const QVariant
当前项目的数据。
3、currentIndex : int
组合框中当前项目的索引。插入或删除项目时,当前索引可以更改。
4、currentText : QString
当前文本。如果组合框是可编辑的,则当前文本是行编辑显示的值。
如果组合框是可编辑的,setCurrentText() 只会调用 setEditText()。否则,如果列表中有匹配的文本,则 currentIndex 设置为相应的索引。
5、duplicatesEnabled : bool
可编辑时设置setSizeAdjustPolicy()将输入内容插入到组合框,是否可以在组合框中插入重复项。默认为 false。
请注意,始终可以以编程方式将重复项插入组合框。
6、editable : bool
是否可以编辑组合框。默认为 false。编辑的效果取决于插入策略。
注意:禁用可编辑状态时,将删除验证器和完成器。
7、frame : bool
略。
8、iconSize : QSize
组合框中显示的图标的大小。这是图标可以具有的最大大小,较小尺寸的图标不会放大。
9、insertPolicy : InsertPolicy
可编辑时插入的项目应出现在组合框中的位置的策略。
默认值为 InsertAtBottom,即新项目将出现在项目列表的底部。
10、maxCount : int
组合框中允许的最大项目数。
如果将最大数量设置为小于组合框中当前项目的数量,则额外的项目将被截断。如果在组合框上设置了外部模型,这也适用。
11、maxVisibleItems : int
组合框屏幕上允许的最大项目数。默认为 10。
对于 QStyle::SH_ComboBox_Popup 返回 true 的样式中的不可编辑组合框,将忽略此属性。
12、minimumContentsLength : int
应适合组合框的最小字符数。默认值为 0。
如果此属性设置为正值,则 minimumSizeHint() 和 sizeHint() 会将其考虑此属性在内。
13、modelColumn : int
模型中可见的列。默认为 0。
14、placeholderText : QString
未设置有效索引时显示的占位符文本文本。
当设置无效索引时将显示占位符文本,下拉列表中的文本不可访问。在添加项目之前调用此函数时,将显示占位符文本,否则如果要显示占位符文本,则必须以编程方式调用 setCurrentIndex(-1)。
当 QComboBox 可编辑时,请改用 lineEdit()->setPlaceholderText()。
15、sizeAdjustPolicy : SizeAdjustPolicy
内容更改时组合框大小如何更改的策略。默认值为 AdjustToContentsOnFirstShow。
四、成员函数
1、QComboBox(QWidget *parent = nullptr)
使用默认模型 QStandardItemModel 构造具有给定父级的组合框。
2、【信号】void activated(int index)
当选择组合框中的项目时发送此信号。请注意,即使选择未更改,也会发送此信号。
【信号】void textActivated(const QString &text)
当选择组合框中的项目时发送此信号。请注意,即使选择未更改,也会发送此信号。
3、void clear()
清除组合框,删除所有项目。
如果在组合框上设置了外部模型,则调用此函数时该模型仍将被清除。
4、void clearEditText()
清除组合框中用于编辑的行编辑的内容。可编辑时才有意义。
5、【信号】void currentIndexChanged(int index)
每当组合框中的 currentIndex 通过用户交互或以编程方式更改时,就会发送此信号。如果组合框变空则index为 -1。
6、【信号】void currentTextChanged(const QString &text)
每当 currentText 更改时发送此信号。新值作为文本传递。
7、【信号】void editTextChanged(const QString &text)
当组合框的行编辑小部件中的文本发生更改时,会发出此信号。
8、【信号】void highlighted(int index)
当突出显示组合框弹出列表中的项目时,将发送此信号。
9、void setEditText(const QString &text)
在组合框的文本编辑中设置文本。可编辑时才有意义。
10、【信号】void textHighlighted(const QString &text)
当突出显示组合框弹出列表中的项目时,将发送此信号。
11、void addItem(const QString &text, const QVariant &userData = QVariant())
使用给定的文本将一个项目添加到组合框,并包含指定的 userData(存储在 Qt::UserRole 中)。 该项目将附加到现有项目的列表中。
void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
使用给定的图标和文本将一个项目添加到组合框,并包含指定的 userData(存储在 Qt::UserRole 中)。 该项目将附加到现有项目的列表中。
void addItems(const QStringList &texts)
将给定文本列表中的每个字符串添加到组合框。 每个项目依次附加到现有项目的列表中。
void insertItem(int index, const QString &text, const QVariant &userData = QVariant())
void insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
void insertItems(int index, const QStringList &list)
将文本和用户数据(存储在 Qt::UserRole 中)插入到组合框中给定索引处。
如果索引等于或大于项目总数,则新项目将附加到现有项目列表中。
如果索引为零或为负,则新项目将插入到现有项目列表的前面。
QVariant itemData(int index, int role = Qt::UserRole)
返回组合框中给定索引中给定角色的数据,如果没有此角色的数据,则返回无效的 QVariant。
void removeItem(int index)
从组合框中删除给定索引处的项目。如果索引超出范围,此函数将不执行任何操作。
12、void insertSeparator(int index)
在给定索引处将分隔符项插入组合框。
如果索引等于或大于项目总数,则新项目将附加到现有项目列表中。
如果索引为零或为负,则新项目将添加到现有项目列表的前面。
13、void setCompleter(QCompleter *completer) / QCompleter * completer()
设置要使用的完成器。如果为 nullptr,则禁用自动完成。
默认情况下,对于可编辑的组合框,会自动创建一个执行不区分大小写的内联完成的 QCompleter。
当 editable 属性变为 false 时,或者当行编辑被调用 setLineEdit() 替换时,完成符将被删除。在不可编辑的 QComboBox 上设置完成器将被忽略。
14、int findData(const QVariant &data, int role = Qt::UserRole, Qt::MatchFlags flags = static_cast<Qt::MatchFlags>(Qt::MatchExactly|Qt::MatchCaseSensitive))
返回包含给定角色的给定数据的项目的索引,否则返回-1。
flags 指定如何搜索组合框中的项目。Qt::MatchFlags见 QML控件类型:ComboBox
int findText(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly|Qt::MatchCaseSensitive)
返回包含给定文本的项目的索引,否则返回-1。
15、[virtual] void hidePopup()
隐藏组合框中的项目列表。
[virtual] void showPopup()
显示组合框中的项目列表。
如果重新实现此函数以显示自定义弹出窗口,应确保调用 hidePopup() 以重置内部状态。
16、void initStyleOption(QStyleOptionComboBox *option)
使用此 QComboBox 中的值初始化选项。当子类需要 QStyleOptionComboBox,但又不想自己填写所有信息时,此方法很有用。
17、QVariant itemData(int index, int role = Qt::UserRole)
void setItemData(int index, const QVariant &value, int role = Qt::UserRole)
返回 / 设置组合框中给定索引中给定角色的数据,如果没有此角色的数据,则返回无效的 QVariant。
18、void setItemDelegate(QAbstractItemDelegate *delegate)
设置弹出列表视图的项目委托。组合框获得委托的所有权。
任何现有的委托都将被删除,但不会被删除,现有委托的所有权交给用户。
19、QIcon itemIcon(int index) / void setItemIcon(int index, const QIcon &icon)
返回 / 设置给定索引的图标。
20、QString itemText(int index) / void setItemText(int index, const QString &text)
设置 / 返回给定索引上项目的文本。
21、QLineEdit * lineEdit()
返回用于编辑组合框中项目的行编辑器,只有可编辑的组合框才有行编辑器。
void setLineEdit(QLineEdit *edit)
设置要使用的行编辑器。组合框拥有行编辑器的所有权。
由于组合框的行编辑器拥有 QCompleter,任何先前对 setCompleter() 的调用将不再有效。
22、void setModel(QAbstractItemModel *model)
设置模型。model不能为 nullptr。如果要清除模型的内容,请调用 clear()。
如果组合框是可编辑的,那么模型也将设置在行编辑的完成器上。
23、void setRootModelIndex(const QModelIndex &index)
为组合框中的项目设置根模型项目索引。
24、void setView(QAbstractItemView *itemView)
设置组合框弹出窗口中使用的视图。组合框拥有itemView的所有权。
如果想使用便利视图(如 QListWidget、QTableWidget 或 QTreeWidget),请确保在调用此函数之前使用便利小部件模型调用组合框上的 setModel()。