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始終可見 |