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助手

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