QComboBox

QComboBox是Qt库中的一个组件,用于以紧凑的方式展示选项列表。它使用模型/视图框架存储项目,支持设置不同插入策略和大小调整策略。QComboBox有多种属性,如当前选中项的索引、文本、数据,以及最大项目数等。此外,还提供了添加、删除项目,以及设置编辑文本、模型和视图等功能。组合框的信号包括激活、当前项改变、文本激活等,可用于响应用户交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、描述

QComboBox 提供了一种以占用最少屏幕空间的方式向用户呈现选项列表的方法。

QComboBox 为其弹出列表使用模型/视图框架并存储其项目。默认情况下,QStandardItemModel 存储项目, QListView 子类显示弹出列表。可以直接访问模型和视图(使用 model() 和 view()),但 QComboBox 还提供设置和获取项目数据的功能(例如,setItemData() 和 itemText())。还可以设置新模型和视图(使用 setModel() 和 setView())。对于组合框标签中的文本和图标,使用具有 Qt::DisplayRoleQt::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的所有权。

如果想使用便利视图(如 QListWidgetQTableWidgetQTreeWidget),请确保在调用此函数之前使用便利小部件模型调用组合框上的 setModel()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值