Qt之输入控件(QComboBox)

简述

QComboBox控件是按钮和弹出列表的组合。

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

详细描述

组合框是显示当前项目的选择类控件,并且可以弹出可选项目的列表。

组合框可以包含像素图和字符串;insertItem()和setItemText()函数在QComboBox中被适当地重载了。对于可编辑的组合框,提供了函数clearEditText(),以清除显示的字符串而不更改组合框的内容。

如果组合框的当前项目发生更改,则会发出两个信号:currentIndexChanged() 和 activated()。无论更改是通过编程方式还是通过用户交互进行,始终都会发出currentIndexChanged(),而仅当更改是由用户交互引起时才发出activate()。当用户突出显示组合框弹出列表中的一个项目时,将发出highlighted()信号。所有这三个信号都有两个版本,一个带有QString参数,另一个带有int参数。如果用户选择或突出显示一个像素图,则仅会发出int信号。只要更改了可编辑组合框的文本,就会发出editTextChanged()信号。

当用户在可编辑的组合框中输入新字符串时,该窗口小部件可能会插入也可能不会插入,并且可以将其插入多个位置。默认策略是InsertAtBottom,但是可以使用setInsertPolicy()进行更改。

使用QValidator可以限制输入内容范围。请参见setValidator()。默认情况下,接受任何输入。

可以使用插入函数来填充组合框,例如insertItem()和insertItems()。可以使用setItemText()更改项目。可以使用removeItem()删除项目,并且可以使用clear()删除所有项目。当前项目的文本由currentText()返回,而编号项目的文本由text()返回。可以使用setCurrentIndex()设置当前项目。组合框中的项目数由count()返回。可以使用setMaxCount()设置最大项目数。您可以使用setEditable()进行编辑。对于可编辑的组合框,您可以使用setCompleter()设置自动完成功能,并且可以使用setDuplicatesEnabled()设置用户是否可以添加重复项。

使用方法

下面用一个小例子介绍基本使用方法

效果

源码

    QStringList comboBoxList = {"编译", "编译所有", "运行"};
    QComboBox *comboBox = new QComboBox;
    comboBox->addItem(QString("粘贴"));
    comboBox->addItem(QIcon(":/picture/tool.png"), QString("工具"));
    comboBox->addItems(comboBoxList);
    comboBox->setEditable(true);
    comboBox->setDuplicatesEnabled(true);
    comboBox->insertSeparator(2);
    comboBox->setItemIcon(0, QIcon(":/picture/paste.png"));

    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(comboBox);

    this->setLayout(layout);
    this->setWindowTitle("Shijia Yin");

常用接口

属性

  • 组合框中条目数量
    • count
  • 图标尺寸
    • iconSize
  • 当前条目数据
    • currentData
  • 条目插入策略
    • insertPolicy
常量 描述
QComboBox::NoInsert 0 该字符串将不会插入到组合框中。
QComboBox::InsertAtTop 1 该字符串将作为组合框中的第一项插入。
QComboBox::InsertAtCurrent 2 当前项目将被字符串替换。
QComboBox::InsertAtBottom 3 该字符串将被插入组合框中的最后一项之后。
QComboBox::InsertAfterCurrent 4 该字符串将插入到组合框中当前项目之后。
QComboBox::InsertBeforeCurrent 5 该字符串将插入到组合框中当前项目的前面。
QComboBox::InsertAlphabetically 6 该字符串将按字母顺序插入组合框中。
  • 当前条目索引
    • currentIndex
  • 条目最大数量
    • maxCount
  • 当前文本
    • currentText
  • 可否向输入框粘贴内容
    • duplicatesEnabled
  • 是否可编辑
    • editable
  • 添加新内容或更改内容时,QComboBox调整调整策略。
    • SizeAdjustPolicy
常量 描述
QComboBox::AdjustToContents 0 组合框将始终根据内容进行调整
QComboBox::AdjustToContentsOnFirstShow 1 组合框将在第一次显示时调整为其内容。
QComboBox::AdjustToMinimumContentsLength 2 请改用AdjustToContents或AdjustToContentsOnFirstShow。
QComboBox::AdjustToMinimumContentsLengthWithIcon 3 组合框将调整为最小内容长度加上图标的空间。出于性能原因,请在大型模型上使用此策略。
  • 是否使用了Frame
    • frame

公共函数

  • 添加条目

    • addItem(const QString &text, const QVariant &userData = QVariant())
    • addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
    • addItems(const QStringList &texts)
  • 移除条目

    • removeItem(int index)
  • 隐藏弹出列表

    • hidePopup()
  • 显示弹出列表

    • showPopup()
  • 插入条目

    • insertItem(int index, const QString &text, const QVariant &userData = QVariant())
    • insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
    • insertItems(int index, const QStringList &list)
  • 插入分隔符

    • insertSeparator(int index)
  • 设置可编辑

    • setEditable(bool editable)
  • 设置插入策略

    • setInsertPolicy(QComboBox::InsertPolicy policy)
  • 设置调整策略

    • setSizeAdjustPolicy(QComboBox::SizeAdjustPolicy policy)

槽函数

描述
clear() 移除所有条目
clearEditText() 清除行编辑器文本
setCurrentIndex(int index) 设置特定索引控件为当前控件
setCurrentText(const QString &text) 设置特定文本控件为当前控件
setEditText(const QString &text) 设置行编辑器文本

信号函数

信号 描述
activated(int index) 当用户选中某个条目时,发出带有被选中条目索引的信号,即使选择没有发生变化
activated(const QString &text) 当用户选中某个条目时,发出带有被选中条目文本的信号,即使选择没有发生变化
currentIndexChanged(int index) 当用户选中某个条目时,发出带有被选中条目索引的信号,仅当选择发生变化
currentIndexChanged(const QString &text) 当用户选中某个条目时,发出带有被选中条目文本的信号,仅当选择发生变化
currentTextChanged(const QString &text) 当前文本发生变化时,发出带有新文本的信号
editTextChanged(const QString &text) 当前文本发生变化时,发出带有新文本的信号
highlighted(int index) 发出带有当前高亮的条目的索引的信号
highlighted(const QString &text) 发出带有当前高亮的条目的文本的信号

引用

[1] Qt助手

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章