基本Widgets(19):【類】QComboBox [官翻]
技術標籤:Qt
文章目錄
QComboBox Class
QComboBox小部件是一個組合的按鈕和彈出列表。
Header | #include < QComboBox> |
---|---|
qmake | QT += widgets |
Inherits | QWidget |
Inherited By | QFontComboBox |
詳細說明
QComboBox提供了一種以佔用最小螢幕空間的方式向用戶呈現選項列表的方法。
組合框是顯示當前專案的選擇小部件,可以彈出可選擇專案的列表。組合框可以編輯,允許使用者修改列表中的每個專案。
組合框可以包含pixmap和字串;insertItem() 和setItemText() 函式可以適當地過載。對於可編輯的組合框,提供了函式clearEditText() ,以清除顯示的字串而不更改組合框的內容。
如果組合框的當前項更改,將發出三個訊號:currentIndexChanged() 、currentTextChanged() 和activated() 。currentIndexChanged() 和currentTextChanged() 始終發出,無論更改是通過程式設計方式還是通過使用者互動進行的,而activated() 僅
當用戶在一個可編輯的組合框中輸入一個新字串時,小部件可以插入它,也可以不插入它,它可以在幾個位置插入它。預設策略為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應執行的操作。
Constant | Value | Description |
---|---|---|
NoInsert | 0 | 字串不會插入到組合框中。 |
InsertAtTop | 1 | 字串將作為組合框中的第一項插入。 |
InsertAtCurrent | 2 | 當前項將替換為字串。 |
InsertAtBottom | 3 | 字串將插入組合框中最後一項之後。 |
InsertAfterCurrent | 4 | 字串插入在組合框中的當前項之後。 |
InsertBeforeCurrent | 5 | 字串插入到組合框中當前項的前面。 |
InsertAlphabetically | 6 | 字串按字母順序插入組合框中。 |
enum SizeAdjustPolicy
此列舉指定新增新內容或內容更改時QComboBox的大小提示應如何調整。
Constant | Value | Description |
---|---|---|
AdjustToContents | 0 | 組合框將始終根據內容進行調整 |
AdjustToContentsOnFirstShow | 1 | 組合框在第一次顯示時將根據其內容進行調整。 |
AdjustToMinimumContentsLengthWithIcon | AdjustToContentsOnFirstShow + 2 | 組合框將調整為圖示的最小內容長度加上空間。出於效能原因,請在大型模型上使用此策略。 |
屬性
-
count: const int 組合框中的項數
預設情況下,對於空組合框,此屬性的值為0。Access functions:
- int count() const
-
currentData: const QVariant 當前項的資料
預設情況下,對於空組合框或未設定當前項的組合框,此屬性包含無效的QVariant。Access functions:
- QVariant currentData(int role = Qt::UserRole) const
-
currentIndex: int 當前項的索引
插入或刪除專案時,當前索引可能會更改。
預設情況下,對於空組合框或未設定當前項的組合框,此屬性的值為-1。Access functions:
- int currentIndex() const
- void setCurrentIndex(int index)
Notifier signal:
- void currentIndexChanged(int index)
-
currentText: QString 當前文字
如果組合框是可編輯的,則當前文字是行編輯顯示的值。否則,如果組合框為空或未設定當前項,則為當前項的值或空字串。如果組合框是可編輯的,設定器 setCurrentText() 只調用setEditText() 。否則,如果列表中有匹配的文字,currentIndex將設定為相應的索引。
Access functions:
- QString currentText() const
- void setCurrentText(const QString &text)
Notifier signal:
- void currentTextChanged(const QString &text)
-
duplicatesEnabled: bool 是否允許輸入重複項
請注意,總是可以通過程式設計方式將重複項插入到組合框中。
預設情況下,此屬性為false(不允許重複)。Access functions:
- bool duplicatesEnabled() const
- void setDuplicatesEnabled(bool enable)
-
editable: bool 是否允許編輯
預設情況下,此屬性為false。編輯的效果取決於插入策略。
注意:禁用可編輯狀態時,將刪除驗證程式和完成程式。
Access functions:- bool isEditable() const
- void setEditable(bool editable)
-
Access functions:
-
frame: bool 是否使用框架繪製自身
如果啟用(預設設定),組合框將在一個框架內繪製自身,否則組合框將在沒有任何框架的情況下繪製自身。Access functions:
- bool hasFrame() const
- void setFrame(bool)
-
iconSize: QSize 顯示的圖示的大小
除非顯式設定,否則返回當前樣式的預設值。此大小是圖示可以具有的最大尺寸;較小尺寸的圖示不會按比例放大。Access functions:
- QSize iconSize() const
- void setIconSize(const QSize &size)
-
insertPolicy: InsertPolicy 用於確定使用者插入的項應顯示在組合框中的位置的策略
預設值為insertbottom,表示新專案將出現在專案列表的底部。Access functions:
- QComboBox::InsertPolicy insertPolicy() const
- void setInsertPolicy(QComboBox::InsertPolicy policy)
-
maxCount: int 組合框中允許的最大項數
注意:如果將最大數量設定為小於組合框中當前專案的數量,則多餘的專案將被截斷。如果您在組合框上設定了外部模型,這也適用。
預設情況下,此屬性的值是從可用的最高有符號整數(通常為2147483647)引申的。Access functions:
- int maxCount() const
- void setMaxCount(int max)
-
maxVisibleItems: int 組合框螢幕上允許顯示的最大大小(以項為單位)
預設情況下,此屬性的值為10。
注意:對於QStyle::SH_ComboBox_Popup(如Mac樣式或Gtk+樣式)返回true的樣式中的不可編輯組合框,忽略此屬性。Access functions:
- int maxVisibleItems() const
- void setMaxVisibleItems(int maxItems)
-
minimumContentsLength: int 組合框中應包含的最小字元數
預設值為0。
如果此屬性設定為正值,則minimumSizeHint() 和sizeHint() 會將其考慮在內。Access functions:
- int minimumContentsLength() const
- void setMinimumContentsLength(int characters)
-
modelColumn: int 模型中可見的列
如果在填充組合框之前設定,彈出檢視將不受影響,並將顯示第一列(使用此屬性的預設值)。
預設情況下,此屬性的值為0。Access functions:
- int modelColumn() const
- void setModelColumn(int visibleColumn)
-
placeholderText: QString 設定未設定有效索引時顯示的文字佔位符
設定無效索引時,將顯示佔位符文字。在下拉列表中無法訪問文字。在新增項之前呼叫此函式時,將顯示佔位符文字,否則,如果要顯示佔位符文字,必須以程式設計方式呼叫setCurrentIndex(-1)。設定空佔位符文字以重置設定。
當QComboBox可編輯時,請改用QLineEdit::setPlaceholderText() 。Access functions:
- QString placeholderText() const
- void setPlaceholderText(const QString &placeholderText)
-
sizeAdjustPolicy: SizeAdjustPolicy 內容更改時組合框大小如何更改的策略
預設值為AdjustToContentsOnFirstShow。Access functions:
- QComboBox::SizeAdjustPolicy sizeAdjustPolicy() const
- void setSizeAdjustPolicy(QComboBox::SizeAdjustPolicy policy)
公共函式
構造和析構
- QComboBox(QWidget *parent = nullptr)
- virtual ~QComboBox()
屬性相關
- int count() const
- QVariant currentData(int role = Qt::UserRole) const
- int currentIndex() const
- void setCurrentIndex(int index)
- QString currentText() const
- void setCurrentText(const QString &text)
- bool duplicatesEnabled() const
- void setDuplicatesEnabled(bool enable)
- bool isEditable() const
- void setEditable(bool editable)
- bool hasFrame() const
- void setFrame(bool)
- QSize iconSize() const
- void setIconSize(const QSize &size)
- QComboBox::InsertPolicy insertPolicy() const
- void setInsertPolicy(QComboBox::InsertPolicy policy)
- int maxCount() const
- void setMaxCount(int max)
- int maxVisibleItems() const
- void setMaxVisibleItems(int maxItems)
- int minimumContentsLength() const
- void setMinimumContentsLength(int characters)
- int modelColumn() const
- void setModelColumn(int visibleColumn)
- QString placeholderText() const
- void setPlaceholderText(const QString &placeholderText)
- QComboBox::SizeAdjustPolicy sizeAdjustPolicy() const
- void setSizeAdjustPolicy(QComboBox::SizeAdjustPolicy policy)
增、刪、改、查
- void addItem(const QString &text, const QVariant &userData = QVariant())
- void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
- 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)
- void insertSeparator(int index)
- void removeItem(int index)
- QVariant itemData(int index, int role = Qt::UserRole) const
- void setItemData(int index, const QVariant &value, int role = Qt::UserRole)
- QIcon itemIcon(int index) const
- void setItemIcon(int index, const QIcon &icon)
- QString itemText(int index) const
- void setItemText(int index, const QString &text)
- int findData(const QVariant &data, int role = Qt::UserRole, Qt::MatchFlags flags = static_cast< Qt::MatchFlags >(Qt::MatchExactly|Qt::MatchCaseSensitive) ) const
- int findText(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly|Qt::MatchCaseSensitive) const
特殊
- QCompleter * completer() const 自動完成組合框文字輸入的完成器
- void setCompleter(QCompleter *completer)
- virtual void hidePopup() 隱藏彈出列表
- virtual void showPopup() 顯示彈出列表
- const QValidator * validator() const 驗證器
- void setValidator(const QValidator *validator)
- QLineEdit * lineEdit() const 編輯框
- void setLineEdit(QLineEdit *edit)
模型檢視部分
- QAbstractItemModel * model() const
- void setModel(QAbstractItemModel *model)
- QModelIndex rootModelIndex() const
- void setRootModelIndex(const QModelIndex &index)
- QAbstractItemView * view() const
- void setView(QAbstractItemView *itemView)
- QAbstractItemDelegate * itemDelegate() const
- void setItemDelegate(QAbstractItemDelegate *delegate)
重寫的公共函式
- virtual bool event(QEvent *event) override
- virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const override
- virtual QSize minimumSizeHint() const override
- virtual QSize sizeHint() const override
公共槽
- void clear() 清除組合框,刪除所有項
- void clearEditText() 清除行編輯的內容
- void setEditText(const QString &text) 在編輯中設定文字
- void setCurrentIndex(int index) 屬性相關
- void setCurrentText(const QString &text) 屬性相關
訊號
- void activated(int index)
- void currentIndexChanged(int index)
- void currentTextChanged(const QString &text)
- void editTextChanged(const QString &text)
- void highlighted(int index)
- void textActivated(const QString &text)
- void textHighlighted(const QString &text)
受保護的函式
- void initStyleOption(QStyleOptionComboBox *option) const
重寫的受保護的函式
- virtual void changeEvent(QEvent *e) override
- virtual void contextMenuEvent(QContextMenuEvent *e) override
- virtual void focusInEvent(QFocusEvent *e) override
- virtual void focusOutEvent(QFocusEvent *e) override
- virtual void hideEvent(QHideEvent *e) override
- virtual void inputMethodEvent(QInputMethodEvent *e) override
- virtual void keyPressEvent(QKeyEvent *e) override
- virtual void keyReleaseEvent(QKeyEvent *e) override
- virtual void mousePressEvent(QMouseEvent *e) override
- virtual void mouseReleaseEvent(QMouseEvent *e) override
- virtual void paintEvent(QPaintEvent *e) override
- virtual void resizeEvent(QResizeEvent *e) override
- virtual void showEvent(QShowEvent *e) override
- 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;
}