QListWidget類提供了一個基于項的列表小部件,QListWidgetItem是列表中的項,該篇文章中涉及到的功能有添加列表項,插入列表項,刪除列表項,清空列表,向上移動列表項,向下移動列表項。
常用API
- addItem(const QString &label):添加項;
- addItems(const QStringList &labels):添加集合項;
- insertItem(int row, QListWidgetItem *item):插入項;
- currentItem() const:當前項
- currentRow() const:當前行;
- item(int row) const:如果列表中給定行的元素被設置,則返回對應的元素;否則返回null;
- row(const QListWidgetItem *item) const:返回包含給定項的行;
- count() const:反列表中項目的數量;
- takeItem(int row):移除項;
常用信號
- void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous):每當當前元素發生變化時,就會發出這個信號;
- void currentRowChanged(int currentRow):每當當前元素發生變化時,就會發出這個信號;
- void currentTextChanged(const QString ¤tText):每當當前元素發生變化時,就會發出這個信號;
- void itemActivated(QListWidgetItem *item):當項目被激活時,這個信號就會發出。根據系統配置,當用戶單擊或雙擊該項目時,該項目將被激活;
- void itemChanged(QListWidgetItem *item):每當item的數據發生變化時,就會發出這個信號;
- void itemClicked(QListWidgetItem *item):當鼠標按鈕單擊部件中的某個項目時,該信號由指定的項目發出;
- void itemDoubleClicked(QListWidgetItem *item):當鼠標按鈕雙擊部件中的某個項目時,該信號由指定的項目發出;
- void itemEntered(QListWidgetItem *item):當鼠標光標進入某個元素時,就會發出這個信號。項目就是輸入的項目。這個信號只有在mouseTracking被打開,或者鼠標移動到某個元素時按下了鼠標按鈕時才會發出;
- void itemPressed(QListWidgetItem *item):當在部件中的某個項目上按下鼠標按鈕時,該信號由指定的項目發出;
- void itemSelectionChanged():每當選擇發生變化時,就會發出這個信號;
圖片示例
代碼示例
QlistWidgetDialog.h
#ifndef QLISTWIDGETDIALOG_H
#define QLISTWIDGETDIALOG_H#include <QDialog>
#include <QListWidgetItem>
namespace Ui
{class QlistWidgetDialog;
}class QlistWidgetDialog : public QDialog
{Q_OBJECTpublic:explicit QlistWidgetDialog(QWidget* parent = nullptr);~QlistWidgetDialog();private slots:void on_pushButtonAdd_clicked();void on_pushButtonUp_clicked();void on_pushButtonDown_clicked();void on_pushButtonRemove_clicked();void on_pushButtonClear_clicked();void on_pushButtonInsert_clicked();void on_listWidget_currentRowChanged(int currentRow);void on_listWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous);void on_listWidget_currentTextChanged(const QString& currentText);void on_listWidget_customContextMenuRequested(const QPoint& pos);private:Ui::QlistWidgetDialog* ui;};#endif // QLISTWIDGETDIALOG_H
QlistWidgetDialog.cpp
#include "QlistWidgetDialog.h"
#include "ui_QlistWidgetDialog.h"
#include <QListWidgetItem>>
#include <QDebug>
#include <QMenu>
QlistWidgetDialog::QlistWidgetDialog(QWidget* parent): QDialog(parent), ui(new Ui::QlistWidgetDialog)
{ui->setupUi(this);//listWidget屬性設置為自定義菜單 才可以鼠標右鍵自定義右鍵菜單ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
}QlistWidgetDialog::~QlistWidgetDialog()
{delete ui;
}void QlistWidgetDialog::on_pushButtonAdd_clicked()
{QString text = ui->lineEdit->text();QListWidgetItem* item = new QListWidgetItem(text);// 可編輯item->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);ui->listWidget->addItem(item);
}void QlistWidgetDialog::on_pushButtonUp_clicked()
{QListWidgetItem* selectItem = ui->listWidget->currentItem();int curRow = ui->listWidget->row(selectItem);if(curRow > 0) {ui->listWidget->takeItem(curRow);ui->listWidget->insertItem(curRow - 1, selectItem);ui->listWidget->setCurrentItem(selectItem);}
}void QlistWidgetDialog::on_pushButtonDown_clicked()
{QListWidgetItem* selectItem = ui->listWidget->currentItem();int curRow = ui->listWidget->row(selectItem);if(curRow < ui->listWidget->count() - 1) {//移除當前行號的itemui->listWidget->takeItem(curRow);//在curRow+1位置插入選中的itemui->listWidget->insertItem(curRow + 1, selectItem);//設置選中的item為當前itemui->listWidget->setCurrentItem(selectItem);}
}void QlistWidgetDialog::on_pushButtonRemove_clicked()
{int row = ui->listWidget->currentRow();//移除項QListWidgetItem* dItem = ui->listWidget->takeItem(row);//刪除對象delete dItem;
}void QlistWidgetDialog::on_pushButtonClear_clicked()
{ui->listWidget->clear();
}void QlistWidgetDialog::on_pushButtonInsert_clicked()
{QString text = ui->lineEdit->text();int curRow = ui->listWidget->currentRow();QListWidgetItem* newItem = new QListWidgetItem(text);ui->listWidget->insertItem(curRow, newItem);
}void QlistWidgetDialog::on_listWidget_currentRowChanged(int currentRow)
{qDebug()<<"currentRow"<<currentRow;
}void QlistWidgetDialog::on_listWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous)
{// QString curText = current->text();// QString preText = previous->text();// qDebug()<<"curText"<<curText<<"preText"<<preText;
}void QlistWidgetDialog::on_listWidget_currentTextChanged(const QString& currentText)
{qDebug()<<"currentText"<<currentText;
}//鼠標右鍵
void QlistWidgetDialog::on_listWidget_customContextMenuRequested(const QPoint& pos)
{Q_UNUSED(pos);QMenu* menu = new QMenu(this);QAction* act1 = new QAction("act1");QAction* act2 = new QAction("act2");QAction* act3 = new QAction("act3");QAction* act4 = new QAction("act4");menu->addAction(act1);menu->addAction(act2);menu->addAction(act3);menu->addAction(act4);menu->exec(QCursor::pos());//在鼠標光標位置顯示右鍵快捷菜單delete menu;
}