0、說明
QListWidget指明一個基於Item的List Widget。

構造
QListWidget與QListView類似,都可以顯示一列Item,區別在於前者可以往其中增刪Item。
QListWidget的構造方法和其他Widgets的構造方法類似:
QListWidget *listWidget = new QListWidget(this);
選中
調用selectionMode()可以知道該ListWidget一次可以選中多少個Item,是否可以構造復雜的選項。調用setSelectionMode()可以設置該變量。
添加與移除
有兩種方法可以往List中增加Items:
添加單個Item
①構造Item時,指明所在ListWidget,就可以在創建完成后自動加進去;
new QListWidgetItem(tr("Oak"), listWidget); new QListWidgetItem(tr("Fir"), listWidget); new QListWidgetItem(tr("Pine"), listWidget);
②構造Item,不指定所在ListWidget;等待ListWidget調用insertItem()添加。
QListWidgetItem *newItem = new QListWidgetItem; newItem->setText(itemText); listWidget->insertItem(row, newItem);
添加多個Items
如果有多個Items,可以用insertItems()。
移除:takeItem()
統計:count()
當前Item
通過currentItem()得到當前Item,通過setCurrentItem()改變當前Item。當然我們也能通過鼠標或鍵盤直接選中不同的Item。
每當當前Item改變時,發送currentItemChanged()信號,信號中保存有修改前后的兩個Item。
1、模塊和加載項
| Header: | #include <QListWidget> |
| qmake: | QT += widgets |
| Inherits: | QListView |
2、構造
| QListWidget(QWidget *parent = nullptr) |
3、實例字段
字段 |
說明 |
getter、setter |
信號 |
|
| int | count | 一共多少Item | count() | |
| int | currentRow | 當前行 | currentRow() setCurrentRow(int row) |
currentRowChanged(int currentRow) |
| bool | sortingEnabled | 可否排序 | isSortingEnabled() setSortingEnabled(bool enable) |
6、實例方法
返回值類型 |
方法 |
說明 |
| void | addItem(const QString &label) addItem(QListWidgetItem *item) |
在List末尾加入一個Item(多次加入同一個Item會導致不可預知的錯誤) |
| void | addItems(const QStringList &labels) | 在List末尾插入若干text為labels中的Label的Item |
| void | closePersistentEditor(QListWidgetItem *item) | 關閉給定Item上的編輯器 |
| int | count() | 一共多少個Item |
| QListWidgetItem * | currentItem() | 當前Item |
| int | currentRow() | 當前Item所在行 |
| void | editItem(QListWidgetItem *item) | 如果item可編輯,就開始編輯 |
| QList<QListWidgetItem *> | findItems(const QString &text, Qt::MatchFlags flags) | 查找Text符合給定的text的Items |
| void | insertItem(int row, QListWidgetItem *item) insertItem(int row, const QString &label) |
在指定行插入Item |
| void | insertItems(int row, const QStringList &labels) | 在指定行插入多個Items |
| bool | isPersistentEditorOpen(QListWidgetItem *item) | item上的編輯器是否開啟 |
| bool | isSortingEnabled() | 是否允許排序 |
| QListWidgetItem * | item(int row) | 指定行上的Item |
| QListWidgetItem * | itemAt(const QPoint &p) itemAt(int x, int y) |
指定位置處的Item 該位置依賴於Widget的viewport()說明的坐標系 |
| QWidget * | itemWidget(QListWidgetItem *item) | 返回一個Widget用於展示給定Item |
| void | openPersistentEditor(QListWidgetItem *item) | 在指定Item上打開編輯器 |
| void | removeItemWidget(QListWidgetItem *item) | 移除用於展示給定Item而設置的Widget |
| int | row(const QListWidgetItem *item) | Item所在行 |
| void | selectedItems() | 當前選中的Item |
| setCurrentItem(QListWidgetItem *item) | 設置當前Item | |
| setCurrentRow(int row) | 設置當前行 | |
| setItemWidget(QListWidgetItem *item, QWidget *widget) | 設置Widget用於展示給定Item | |
| setSortingEnabled(bool enable) | ||
| void | sortItems(Qt::SortOrder order = Qt::AscendingOrder) | 按照order指定的規則進行排序 |
| QListWidgetItem * | takeItem(int row) | 提取並移除指定行的Item |
| QRect | visualItemRect(const QListWidgetItem *item) | 返回一個只包含給定Item的矩形框QRect |
7、信號
信號 |
說明 |
| currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) | 每當List中的當前的Item改變時,參數分別標明改變前后的Item |
| currentRowChanged(int currentRow) | 當前Item修改時發送該信號。currnetRow指明該Item所在行。 |
| currentTextChanged(const QString ¤tText) | 當前Item修改時發送該信號。currnetText指明該Item的文本。 |
| itemActivated(QListWidgetItem *item) | 每當List中參數指明的Item激活(選中)時,發送該信號 |
| itemChanged(QListWidgetItem *item) | 每當List中參數指明的Item改變時,發送該信號 |
| itemClicked(QListWidgetItem *item) | 每當List中參數指明的Item被單擊時,發送該信號 |
| itemDoubleClicked(QListWidgetItem *item) | 每當List中參數指明的Item被雙擊時,發送該信號 |
| itemEntered(QListWidgetItem *item) | 每當鼠標焦點進入List中的某個Item時,發送該信號,參數指明這個Item |
| itemPressed(QListWidgetItem *item) | 每當List中的某個Item被按時,發送該信號,參數指明這個Item |
| itemSelectionChanged() | 每當選中的Item改變時發送該信號 |
8、槽
槽 |
說明 |
| clear() | 清空List |
| scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible) | 上下滾動視圖,以保證item始終可見 |
