1. 程式人生 > 其它 >基本Widgets(19):【類】QComboBox [官翻]

基本Widgets(19):【類】QComboBox [官翻]

技術標籤:Qt

文章目錄

QComboBox Class

QComboBox小部件是一個組合的按鈕和彈出列表。

Header#include < QComboBox>
qmakeQT += widgets
InheritsQWidget
Inherited ByQFontComboBox

詳細說明

img

QComboBox提供了一種以佔用最小螢幕空間的方式向用戶呈現選項列表的方法。

組合框是顯示當前專案的選擇小部件,可以彈出可選擇專案的列表。組合框可以編輯,允許使用者修改列表中的每個專案。

組合框可以包含pixmap和字串;insertItem() 和setItemText() 函式可以適當地過載。對於可編輯的組合框,提供了函式clearEditText() ,以清除顯示的字串而不更改組合框的內容。

如果組合框的當前項更改,將發出三個訊號:currentIndexChanged() 、currentTextChanged() 和activated() 。currentIndexChanged() 和currentTextChanged() 始終發出,無論更改是通過程式設計方式還是通過使用者互動進行的,而activated()

在更改是由使用者互動引起時發出。當用戶高亮顯示組合框彈出列表中的專案時,將發出highlighted() 訊號。這三個訊號都有兩個版本,一個是QString引數,另一個是int引數。如果使用者選擇或高亮顯示一個pixmap,則只會發出int訊號。每當更改可編輯組合框的文字時,都會發出editTextChanged() 訊號。

當用戶在一個可編輯的組合框中輸入一個新字串時,小部件可以插入它,也可以不插入它,它可以在幾個位置插入它。預設策略為insertbottom,但可以使用setInsertPolicy() 對此進行更改。

可以使用QValidator將輸入約束到可編輯的組合框;請參閱setValidator() 。預設情況下,接受任何輸入。

例如,可以使用insert函式insertItem() 和insertItems() 填充組合框。可以使用setItemText() 更改項。可以使用removeItem() 刪除專案,也可以使用clear() 刪除所有專案。當前項的文字由currentText() 返回,編號項的文字由text() 返回。可以使用setCurrentIndex() 設定當前項。combobox中的項數由count() 返回;可以使用setMaxCount() 設定最大項數。可以使用setEditable() 進行編輯。對於可編輯的組合框,可以使用setCompleter() 設定自動完成,並且使用者是否可以新增重複項是使用setDuplicatesEnabled() 設定的。

QComboBox使用模型/檢視框架作為其彈出列表並存儲其項。預設情況下,QStandardItemModel儲存這些項,QListView子類顯示popuplist。您可以直接訪問模型和檢視(使用model() 和view() ),但是QComboBox還提供了設定和獲取專案資料的函式(例如setItemData() 和itemText() )。也可以設定新的模型和檢視(使用setModel() 和setView() )。對於組合框標籤中的文字圖示,使用模型中具有Qt::DisplayRole和Qt::DecorationRole的資料。請注意,不能更改view() 的SelectionMode,例如,使用setSelectionMode() 。

公共型別

enum InsertPolicy

此列舉指定當使用者輸入新字串時QComboBox應執行的操作。

ConstantValueDescription
NoInsert0字串不會插入到組合框中。
InsertAtTop1字串將作為組合框中的第一項插入。
InsertAtCurrent2當前項將替換為字串。
InsertAtBottom3字串將插入組合框中最後一項之後。
InsertAfterCurrent4字串插入在組合框中的當前項之後。
InsertBeforeCurrent5字串插入到組合框中當前項的前面。
InsertAlphabetically6字串按字母順序插入組合框中。

enum SizeAdjustPolicy

此列舉指定新增新內容或內容更改時QComboBox的大小提示應如何調整。

ConstantValueDescription
AdjustToContents0組合框將始終根據內容進行調整
AdjustToContentsOnFirstShow1組合框在第一次顯示時將根據其內容進行調整。
AdjustToMinimumContentsLengthWithIconAdjustToContentsOnFirstShow + 2組合框將調整為圖示的最小內容長度加上空間。出於效能原因,請在大型模型上使用此策略。

屬性

  1. count: const int 組合框中的項數
    預設情況下,對於空組合框,此屬性的值為0。

    Access functions:

    • int count() const
  2. currentData: const QVariant 當前項的資料
    預設情況下,對於空組合框或未設定當前項的組合框,此屬性包含無效的QVariant。

    Access functions:

    • QVariant currentData(int role = Qt::UserRole) const
  3. currentIndex: int 當前項的索引
    插入或刪除專案時,當前索引可能會更改。
    預設情況下,對於空組合框或未設定當前項的組合框,此屬性的值為-1。

    Access functions:

    • int currentIndex() const
    1. void setCurrentIndex(int index)

    Notifier signal:

    • void currentIndexChanged(int index)
  4. currentText: QString 當前文字
    如果組合框是可編輯的,則當前文字是行編輯顯示的值。否則,如果組合框為空或未設定當前項,則為當前項的值或空字串。

    如果組合框是可編輯的,設定器 setCurrentText() 只調用setEditText() 。否則,如果列表中有匹配的文字,currentIndex將設定為相應的索引。

    Access functions:

    • QString currentText() const
    1. void setCurrentText(const QString &text)

    Notifier signal:

    • void currentTextChanged(const QString &text)
  5. duplicatesEnabled: bool 是否允許輸入重複項
    請注意,總是可以通過程式設計方式將重複項插入到組合框中。
    預設情況下,此屬性為false(不允許重複)。

    Access functions:

    • bool duplicatesEnabled() const
    1. void setDuplicatesEnabled(bool enable)
  6. editable: bool 是否允許編輯

    預設情況下,此屬性為false。編輯的效果取決於插入策略。

    注意:禁用可編輯狀態時,將刪除驗證程式和完成程式。
    Access functions:

    • bool isEditable() const
    1. void setEditable(bool editable)
  7. Access functions:

  8. frame: bool 是否使用框架繪製自身
    如果啟用(預設設定),組合框將在一個框架內繪製自身,否則組合框將在沒有任何框架的情況下繪製自身。

    Access functions:

    • bool hasFrame() const
    1. void setFrame(bool)
  9. iconSize: QSize 顯示的圖示的大小
    除非顯式設定,否則返回當前樣式的預設值。此大小是圖示可以具有的最大尺寸;較小尺寸的圖示不會按比例放大。

    Access functions:

    • QSize iconSize() const
    1. void setIconSize(const QSize &size)
  10. insertPolicy: InsertPolicy 用於確定使用者插入的項應顯示在組合框中的位置的策略
    預設值為insertbottom,表示新專案將出現在專案列表的底部。

    Access functions:

    • QComboBox::InsertPolicy insertPolicy() const
    1. void setInsertPolicy(QComboBox::InsertPolicy policy)
  11. maxCount: int 組合框中允許的最大項數
    注意:如果將最大數量設定為小於組合框中當前專案的數量,則多餘的專案將被截斷。如果您在組合框上設定了外部模型,這也適用。
    預設情況下,此屬性的值是從可用的最高有符號整數(通常為2147483647)引申的。

    Access functions:

    • int maxCount() const
    1. void setMaxCount(int max)
  12. maxVisibleItems: int 組合框螢幕上允許顯示的最大大小(以項為單位)
    預設情況下,此屬性的值為10。
    注意:對於QStyle::SH_ComboBox_Popup(如Mac樣式或Gtk+樣式)返回true的樣式中的不可編輯組合框,忽略此屬性。

    Access functions:

    • int maxVisibleItems() const
    1. void setMaxVisibleItems(int maxItems)
  13. minimumContentsLength: int 組合框中應包含的最小字元數
    預設值為0。
    如果此屬性設定為正值,則minimumSizeHint() 和sizeHint() 會將其考慮在內。

    Access functions:

    • int minimumContentsLength() const
    1. void setMinimumContentsLength(int characters)
  14. modelColumn: int 模型中可見的列
    如果在填充組合框之前設定,彈出檢視將不受影響,並將顯示第一列(使用此屬性的預設值)。
    預設情況下,此屬性的值為0。

    Access functions:

    • int modelColumn() const
    1. void setModelColumn(int visibleColumn)
  15. placeholderText: QString 設定未設定有效索引時顯示的文字佔位符
    設定無效索引時,將顯示佔位符文字。在下拉列表中無法訪問文字。在新增項之前呼叫此函式時,將顯示佔位符文字,否則,如果要顯示佔位符文字,必須以程式設計方式呼叫setCurrentIndex(-1)。設定空佔位符文字以重置設定。
    當QComboBox可編輯時,請改用QLineEdit::setPlaceholderText() 。

    Access functions:

    • QString placeholderText() const
    1. void setPlaceholderText(const QString &placeholderText)
  16. sizeAdjustPolicy: SizeAdjustPolicy 內容更改時組合框大小如何更改的策略
    預設值為AdjustToContentsOnFirstShow。

    Access functions:

    • QComboBox::SizeAdjustPolicy sizeAdjustPolicy() const
    1. void setSizeAdjustPolicy(QComboBox::SizeAdjustPolicy policy)

公共函式

構造和析構

  1. QComboBox(QWidget *parent = nullptr)
  2. virtual ~QComboBox()

屬性相關

  1. int count() const
  2. QVariant currentData(int role = Qt::UserRole) const
  3. int currentIndex() const
  4. void setCurrentIndex(int index)
  5. QString currentText() const
  6. void setCurrentText(const QString &text)
  7. bool duplicatesEnabled() const
  8. void setDuplicatesEnabled(bool enable)
  9. bool isEditable() const
  10. void setEditable(bool editable)
  11. bool hasFrame() const
  12. void setFrame(bool)
  13. QSize iconSize() const
  14. void setIconSize(const QSize &size)
  15. QComboBox::InsertPolicy insertPolicy() const
  16. void setInsertPolicy(QComboBox::InsertPolicy policy)
  17. int maxCount() const
  18. void setMaxCount(int max)
  19. int maxVisibleItems() const
  20. void setMaxVisibleItems(int maxItems)
  21. int minimumContentsLength() const
  22. void setMinimumContentsLength(int characters)
  23. int modelColumn() const
  24. void setModelColumn(int visibleColumn)
  25. QString placeholderText() const
  26. void setPlaceholderText(const QString &placeholderText)
  27. QComboBox::SizeAdjustPolicy sizeAdjustPolicy() const
  28. void setSizeAdjustPolicy(QComboBox::SizeAdjustPolicy policy)

增、刪、改、查

  1. void addItem(const QString &text, const QVariant &userData = QVariant())
  2. void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
  3. void addItems(const QStringList &texts)
  4. void insertItem(int index, const QString &text, const QVariant &userData = QVariant())
  5. void insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
  6. void insertItems(int index, const QStringList &list)
  7. void insertSeparator(int index)
  8. void removeItem(int index)
  9. QVariant itemData(int index, int role = Qt::UserRole) const
  10. void setItemData(int index, const QVariant &value, int role = Qt::UserRole)
  11. QIcon itemIcon(int index) const
  12. void setItemIcon(int index, const QIcon &icon)
  13. QString itemText(int index) const
  14. void setItemText(int index, const QString &text)
  15. int findData(const QVariant &data, int role = Qt::UserRole, Qt::MatchFlags flags = static_cast< Qt::MatchFlags >(Qt::MatchExactly|Qt::MatchCaseSensitive) ) const
  16. int findText(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly|Qt::MatchCaseSensitive) const

特殊

  1. QCompleter * completer() const 自動完成組合框文字輸入的完成器
  2. void setCompleter(QCompleter *completer)
  3. virtual void hidePopup() 隱藏彈出列表
  4. virtual void showPopup() 顯示彈出列表
  5. const QValidator * validator() const 驗證器
  6. void setValidator(const QValidator *validator)
  7. QLineEdit * lineEdit() const 編輯框
  8. void setLineEdit(QLineEdit *edit)

模型檢視部分

  1. QAbstractItemModel * model() const
  2. void setModel(QAbstractItemModel *model)
  3. QModelIndex rootModelIndex() const
  4. void setRootModelIndex(const QModelIndex &index)
  5. QAbstractItemView * view() const
  6. void setView(QAbstractItemView *itemView)
  7. QAbstractItemDelegate * itemDelegate() const
  8. void setItemDelegate(QAbstractItemDelegate *delegate)

重寫的公共函式

  1. virtual bool event(QEvent *event) override
  2. virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const override
  3. virtual QSize minimumSizeHint() const override
  4. virtual QSize sizeHint() const override

公共槽

  1. void clear() 清除組合框,刪除所有項
  2. void clearEditText() 清除行編輯的內容
  3. void setEditText(const QString &text) 在編輯中設定文字
  4. void setCurrentIndex(int index) 屬性相關
  5. void setCurrentText(const QString &text) 屬性相關

訊號

  1. void activated(int index)
  2. void currentIndexChanged(int index)
  3. void currentTextChanged(const QString &text)
  4. void editTextChanged(const QString &text)
  5. void highlighted(int index)
  6. void textActivated(const QString &text)
  7. void textHighlighted(const QString &text)

受保護的函式

  1. void initStyleOption(QStyleOptionComboBox *option) const

重寫的受保護的函式

  1. virtual void changeEvent(QEvent *e) override
  2. virtual void contextMenuEvent(QContextMenuEvent *e) override
  3. virtual void focusInEvent(QFocusEvent *e) override
  4. virtual void focusOutEvent(QFocusEvent *e) override
  5. virtual void hideEvent(QHideEvent *e) override
  6. virtual void inputMethodEvent(QInputMethodEvent *e) override
  7. virtual void keyPressEvent(QKeyEvent *e) override
  8. virtual void keyReleaseEvent(QKeyEvent *e) override
  9. virtual void mousePressEvent(QMouseEvent *e) override
  10. virtual void mouseReleaseEvent(QMouseEvent *e) override
  11. virtual void paintEvent(QPaintEvent *e) override
  12. virtual void resizeEvent(QResizeEvent *e) override
  13. virtual void showEvent(QShowEvent *e) override
  14. virtual void wheelEvent(QWheelEvent *e) override

小案例

#include <QtWidgets>
#include "Widget.h"

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    app.setApplicationName ("QComboBox");
//    app.setStyleSheet ("QLabel{background:green}");
    QWidget w;
    w.resize (300,50);
    QFrame frame1;
    QFrame frame2;
    QFrame frame3;
    QGridLayout mainLayout(&w);

    QComboBox widget1;
    QComboBox widget2;
    QComboBox widget3;

    QCommonStyle cs;

    for(int i=0;  i < 20; i++){
        widget1.addItem (cs.standardIcon ((QStyle::StandardPixmap)i),         QString::number (i));
        widget2.addItem (cs.standardIcon ((QStyle::StandardPixmap)(i+20)),QString::number (i+20));
        widget3.addItem (cs.standardIcon ((QStyle::StandardPixmap)(i+40)),QString::number (i+40));
    }
// 設定圖示的最大尺寸
    widget1.setIconSize (QSize(32,32));
    widget2.setIconSize (QSize(32,32));
    widget3.setIconSize (QSize(32,32));

    QLabel label1("0-19");
    QLabel label2("20-39");
    QLabel label3("40-59");

    label1.setAlignment (Qt::AlignCenter);
    label2.setAlignment (Qt::AlignCenter);
    label3.setAlignment (Qt::AlignCenter);

    frame1.setFrameShape (QFrame::Panel);
    frame2.setFrameShape (QFrame::Panel);
    frame3.setFrameShape (QFrame::Panel);

    QVBoxLayout *V1 = new QVBoxLayout(&frame1);
    QVBoxLayout *V2 = new QVBoxLayout(&frame2);
    QVBoxLayout *V3 = new QVBoxLayout(&frame3);

    V1->addWidget (&label1);
    V1->addWidget (&widget1);
    V2->addWidget (&label2);
    V2->addWidget (&widget2);
    V3->addWidget (&label3);
    V3->addWidget (&widget3);

    // 佈局加入,此時部件的父類是mainLayout
    mainLayout.addWidget (&frame1,0,1);
    mainLayout.addWidget (&frame2,0,2);
    mainLayout.addWidget (&frame3,0,3);

    w.show ();

    app.exec();
    return 0;
}