QComboBox理論總結
-
- 1. 簡述
- 2. 顯示内容
- 3. 信号
- 4. 常用功能
- 5. model/view 使用
- 6. 槽函數
1. 簡述
QComboBox 提供了一種以占用最小螢幕空間的方式向使用者顯示選項清單的方法。QCombox是顯示目前項目的選擇小部件,可以彈出可選項目的清單。QComBox其實就是一個下拉清單。選擇的項目内容就會顯示在外面,其他項目會被隐藏,同時在下拉時之前選擇的項目位置會被标記好,可以了解顯示的項目其實是一個之前選擇位置項目的副本。這個控件其實預制很很多選項給使用者選擇,減少手動輸入的麻煩。當然哈,QComBox可以是可編輯的,允許使用者修改清單中的每個項目。但是這個不會影響到預先設定項目。
就像下面這種用法,很多能預制的就不要手寫啦
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0ADOlRjMzQTO3QjMkNDOiFjYzQTZlFWO3kjYyUTN2EzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
這篇博文主要是還是不是使用 model/view 版本的介紹哈。其實就是QComBox的基礎簡述。
2. 顯示内容
QComBox可以包含像素圖以及字元串;可以用 insertItem() 和 setItemText() 的相關重置函數來插入帶圖示的清單項
還可以設定QComBox 可以編輯。對于可編輯的QComBox,提供了函數 clearEditText(),用于清除顯示的字元串而不更改QComBox的内容。(其實就是隻是修改目前的顯示内容,之前預制的項目還是不會被修改的呐)
3. 信号
如果QComBox的目前項發生變化,則發出兩個信号,urrentIndexChanged() 和 activated()。無論更改是通過程式設計方式還是通過使用者互動完成的,始終發出 currentIndexChanged(),而 active() 僅在更改由使用者互動引起時發出。當使用者突出顯示QComBox彈出清單中的項目時,将發出 highlighted() 信号。所有三個信号都存在兩個版本,一個帶有QString參數,另一個帶有int參數。如果使用者選擇或突出顯示像素圖,則僅發出 int 信号。每當可編輯QComBox的文本發生更改時,都會發出 editTextChanged() 信号。
QComBox的信号表
信号 | 含義 |
---|---|
activated(int index) | QComBox的目前項發生變化,僅在更改由使用者互動引起時發出,說那個清單項位置被激活了 |
currentIndexChanged(const QString &text) | combox位置發生後,發生的方式是通過程式設計方式、或通過使用者互動都會觸發,攜帶一個目前項的 text |
currentIndexChanged(int index) | combox位置發生後,發生的方式是通過程式設計方式、或通過使用者互動都會觸發,攜帶一個目前項的 index |
currentTextChanged(const QString &text) | 當選擇項的文字和上一次選擇項不同是,攜帶一個目前項的 text |
editTextChanged(const QString &text) | 每當可編輯QComBox的文本發生更改時 |
highlighted(int index) | 就是下拉清單顯示的時候,我們可以用 上 下鍵 移動那個選擇的項目時發射這個信号。 |
textActivated(const QString &text) | 這個沒用過 |
textHighlighted(const QString &text) | 這個沒用過 |
4. 常用功能
當使用者在可編輯QComBox中插入新項目(字元串)的時候,還是有一個插入的政策。預設政策是 InsertAtBottom,但您可以使用 setInsertPolicy() 更改此設定。
政策 | 含義 |
---|---|
Constant | Description |
QComboBox::NoInsert | 不會插入 |
QComboBox::InsertAtTop | 頂部插入 |
QComboBox::InsertAtCurrent | 目前項将被替換輸入的新字元串 |
QComboBox::InsertAtBottom | 後的字元串将被插入到QCombox中的最後一項。 |
QComboBox::InsertAfterCurrent | 新的字元串插入目前項的後面 |
QComboBox::InsertBeforeCurrent | 新的字元串插入目前項的前面 |
QComboBox::InsertAlphabetically | 按照首字母順序的插入字元串 |
可以使用 QValidator 将輸入限制為可編輯的QComBox;參見 setValidator()。預設情況下,接受任何輸入。
QComBox提供了很多好用的功能。
- 可以使用插入單個、多個Item,例如 insertItem() 和 insertItems()
- 可以使用 setItemText() 修改項目
- 可以使用 removeItem() 删除項目
- 可以使用 clear() 删除所有項目
- 目前項的文本由 currentText() 傳回,編号項的文本與 text() 一起傳回
- 可以使用 setCurrentIndex() 設定目前項
- QComBox中的項目個數由 count() 傳回
- 可以使用 setMaxCount() 設定的最大項目數
- 還可以用 setEditable() 是否可編輯 等等
對于可編輯的QComBox,您可以使用 setCompleter() 設定自動補全,就是輸入一部分内容,就顯示一個可能選擇清單,等後面專門用 QCompleter 來完成
5. model/view 使用
QComboBox 使用模型/視圖架構作為其彈出清單并存儲其項目。預設情況下,QStandardItemModel 存儲項目,QListView 子類顯示彈出清單。這個我後面會把Model/View和這個連在一起重新梳理下
6. 槽函數
因為信号有些是重載的信号,在槽函數連接配接的時候就要指定一下是哪個信号,就用的QOverload 函數來指定的就好。
就行下面的 currentIndexChanged 信号在連接配接時候的使用。
connect(comboBox, QOverload<const QString &>::of(&QComboBox::currentIndexChanged),
[=](const QString &text){ /* ... */ });
connect(comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
[=](int index){ /* ... */ });