QListWedget公共函數
函數簽名 | 功能描述 |
---|---|
QListWidget(QWidget *parent = nullptr) | 構造函數,創建一個QListWidget對象,可指定父部件(默認為nullptr)。 |
virtual ~QListWidget() | 虛析構函數,釋放QListWidget對象及其資源。 |
void addItem(QListWidgetItem *item) | 向列表末尾添加一個已有的QListWidgetItem 項。 |
void addItem(const QString &label) | 創建一個新項(QListWidgetItem )并添加至列表末尾,文本內容為label 。 |
void addItems(const QStringList &labels) | 批量創建新項并添加至列表末尾,文本內容為labels 列表中的每個字符串。 |
void closePersistentEditor(QListWidgetItem *item) | 關閉與指定項關聯的持久編輯器(persistent editor)。 |
int count() const | 返回列表中項的總數。 |
QListWidgetItem *currentItem() const | 返回當前選中的項(若未選中則返回nullptr )。 |
int currentRow() const | 返回當前選中項的行號(從0開始計數,無選中項時返回-1)。 |
void editItem(QListWidgetItem *item) | 觸發指定項的編輯模式(例如用戶雙擊后的編輯狀態)。 |
QList<QListWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags) const | 根據text 和匹配標志flags 查找匹配的項,返回結果列表。 |
QModelIndex indexFromItem(const QListWidgetItem *item) const | 返回給定項的模型索引(QModelIndex ),用于模型/視圖操作。 |
void insertItem(int row, QListWidgetItem *item) | 在指定行row 插入一個已有的項。 |
void insertItem(int row, const QString &label) | 在指定行row 創建一個新項并插入,文本內容為label 。 |
void insertItems(int row, const QStringList &labels) | 在指定行row 插入多個新項,文本內容為labels 列表中的每個字符串。 |
bool isPersistentEditorOpen(QListWidgetItem *item) const | 檢查指定項是否已打開持久編輯器,返回true 表示已打開。 |
bool isSortingEnabled() const | 返回是否啟用了自動排序功能(true 表示啟用)。 |
QListWidgetItem *item(int row) const | 返回指定行row 的項(若行號無效返回nullptr )。 |
QListWidgetItem *itemAt(const QPoint &p) const | 返回位于坐標點p 處的項(基于列表視口的坐標系)。 |
QListWidgetItem *itemAt(int x, int y) const | 返回位于坐標(x, y) 處的項(基于列表視口的坐標系)。 |
QListWidgetItem *itemFromIndex(const QModelIndex &index) const | 從模型索引index 獲取對應的項。 |
QWidget *itemWidget(QListWidgetItem *item) const | 返回與指定項關聯的自定義部件(若未設置返回nullptr )。 |
QList<QListWidgetItem *> items(const QMimeData *data) const | 從拖放操作的MIME數據data 中解析出關聯的項列表(用于拖放事件處理)。 |
void openPersistentEditor(QListWidgetItem *item) | 為指定項打開持久編輯器(編輯器將一直顯示,直到手動關閉)。 |
void removeItemWidget(QListWidgetItem *item) | 移除與指定項關聯的自定義部件。 |
int row(const QListWidgetItem *item) const | 返回指定項的行號(從0開始計數,若項不存在返回-1)。 |
QList<QListWidgetItem *> selectedItems() const | 返回所有當前選中的項的列表。 |
void setCurrentItem(QListWidgetItem *item) | 設置指定項為當前選中項。 |
void setCurrentItem(QListWidgetItem *item, QItemSelectionModel::SelectionFlags command) | 設置指定項為當前選中項,并使用command 標志控制選擇行為(如選中、切換等)。 |
void setCurrentRow(int row) | 設置指定行row 為當前選中行。 |
void setCurrentRow(int row, QItemSelectionModel::SelectionFlags command) | 設置指定行row 為當前選中行,并使用command 標志控制選擇行為。 |
void setItemWidget(QListWidgetItem *item, QWidget *widget) | 為指定項設置自定義部件widget (覆蓋項的默認顯示方式)。 |
void setSortingEnabled(bool enable) | 啟用或禁用自動排序功能(enable 為true 時,添加項會自動按排序規則插入)。 |
void sortItems(Qt::SortOrder order = Qt::AscendingOrder) | 按指定順序(升序或降序)對所有項進行排序。 |
QListWidgetItem *takeItem(int row) | 移除并返回指定行row 的項(項不會被刪除,可重新插入到其他位置)。 |
QRect visualItemRect(const QListWidgetItem *item) const | 返回指定項在列表視口中的可視區域矩形(坐標和尺寸)。 |
?QListWedget信號
信號簽名 | 觸發條件與功能描述 |
---|---|
void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) | 當當前選中項發生變化時觸發。current 為新的當前項,previous 為之前的當前項(可能為nullptr )。 |
void currentRowChanged(int currentRow) | 當當前選中項的行號發生變化時觸發。currentRow 為新的行號(無選中項時為-1)。 |
void currentTextChanged(const QString ¤tText) | 當當前選中項的文本發生變化時觸發。currentText 為新的文本內容(無選中項時為空字符串)。 |
void itemActivated(QListWidgetItem *item) | 當用戶激活某個項(如雙擊或按回車鍵)時觸發。item 為被激活的項。 |
void itemChanged(QListWidgetItem *item) | 當項的內容(如文本、圖標等)被修改時觸發。item 為被修改的項。 |
void itemClicked(QListWidgetItem *item) | 當用戶單擊某個項時觸發。item 為被點擊的項。 |
void itemDoubleClicked(QListWidgetItem *item) | 當用戶雙擊某個項時觸發。item 為被雙擊的項。 |
void itemEntered(QListWidgetItem *item) | 當鼠標光標進入某個項的可視區域時觸發(通常用于懸停效果)。item 為對應的項。 |
void itemPressed(QListWidgetItem *item) | 當用戶按下鼠標按鍵(未釋放)在某個項上時觸發。item 為被按下的項。 |
void itemSelectionChanged() | 當選中項的集合發生變化(如選中、取消選中或切換)時觸發。此信號無參數。 |
?QListWidgetItem函數
函數簽名 | 功能描述 |
---|---|
QListWidgetItem(QListWidget *parent = nullptr, int type = Type) | 構造函數,創建一個空項,可指定父列表控件parent 和項類型type (默認為Type )。 |
QListWidgetItem(const QString &text, QListWidget *parent = nullptr, int type = Type) | 構造函數,創建帶有文本text 的項,可指定父列表控件和類型。 |
QListWidgetItem(const QIcon &icon, const QString &text, QListWidget *parent = nullptr, int type = Type) | 構造函數,創建帶有圖標icon 和文本text 的項,可指定父列表控件和類型。 |
QListWidgetItem(const QListWidgetItem &other) | 拷貝構造函數,復制另一個項other 的屬性。 |
virtual ~QListWidgetItem() | 虛析構函數,釋放項的資源。 |
QBrush background() const | 返回項的背景畫刷(顏色或漸變)。 |
Qt::CheckState checkState() const | 返回項的勾選狀態(如未選中、部分選中、完全選中)。 |
virtual QListWidgetItem *clone() const | 虛函數,創建并返回當前項的副本。 |
virtual QVariant data(int role) const | 返回項中指定角色role (如文本、圖標、對齊等)對應的數據。 |
Qt::ItemFlags flags() const | 返回項的標志(如是否可選中、可編輯等)。 |
QFont font() const | 返回項的字體。 |
QBrush foreground() const | 返回項的前景畫刷(文本顏色)。 |
QIcon icon() const | 返回項的圖標。 |
bool isHidden() const | 返回項是否被隱藏。 |
bool isSelected() const | 返回項是否被選中。 |
QListWidget *listWidget() const | 返回項所屬的父列表控件(若無則返回nullptr )。 |
virtual void read(QDataStream &in) | 從數據流in 中讀取項的內容(用于序列化)。 |
void setBackground(const QBrush &brush) | 設置項的背景畫刷。 |
void setCheckState(Qt::CheckState state) | 設置項的勾選狀態。 |
virtual void setData(int role, const QVariant &value) | 設置項中指定角色role 對應的數據為value 。 |
void setFlags(Qt::ItemFlags flags) | 設置項的標志(如禁用、可拖拽等)。 |
void setFont(const QFont &font) | 設置項的字體。 |
void setForeground(const QBrush &brush) | 設置項的前景畫刷(文本顏色)。 |
void setHidden(bool hide) | 設置是否隱藏項(hide 為true 時隱藏)。 |
void setIcon(const QIcon &icon) | 設置項的圖標。 |
void setSelected(bool select) | 設置項是否被選中。 |
void setSizeHint(const QSize &size) | 設置項的推薦顯示尺寸。 |
void setStatusTip(const QString &statusTip) | 設置項的狀態欄提示文本(鼠標懸停時顯示在狀態欄)。 |
void setText(const QString &text) | 設置項的顯示文本。 |
(since 6.4) void setTextAlignment(Qt::Alignment alignment) | (Qt 6.4新增) 設置項的文本對齊方式(如左對齊、居中對齊)。 |
void setToolTip(const QString &toolTip) | 設置項的懸浮提示文本(鼠標懸停時顯示)。 |
void setWhatsThis(const QString &whatsThis) | 設置項的“這是什么?”幫助文本(通過幫助按鈕觸發)。 |
QSize sizeHint() const | 返回項的推薦顯示尺寸。 |
QString statusTip() const | 返回項的狀態欄提示文本。 |
QString text() const | 返回項的顯示文本。 |
int textAlignment() const | 返回項的文本對齊方式(以Qt::Alignment 枚舉值的整數形式表示)。 |
QString toolTip() const | 返回項的懸浮提示文本。 |
int type() const | 返回項的類型(用于自定義項類型的區分)。 |
QString whatsThis() const | 返回項的“這是什么?”幫助文本。 |
virtual void write(QDataStream &out) const | 將項的內容寫入數據流out (用于序列化)。 |
virtual bool operator<(const QListWidgetItem &other) const | 定義項的小于比較規則(默認按文本排序,可重載實現自定義排序邏輯)。 |
QListWidgetItem &operator=(const QListWidgetItem &other) | 賦值運算符,將另一個項other 的屬性復制到當前項。 |
?實踐
ui效果如下
有一個顯示控件:qlistwidget,初始化的時候用他的additem函數添加三個項
ui->listWidget->addItem("c++");
ui->listWidget->addItem("java");
ui->listWidget->addItem("好好學習");
?在ui界面點擊提交會把lineediter里面的文本添加為listwidget的項,注意,在ui里面添加的槽不需要用connect連接,已經連接過了,如果再用會連續觸發兩次。
void MainWindow::on_btnclicked_clicked()
{//獲取lineediter里面的文本QString str=ui->lineEdit->text();//如果內容為空,不執行if(str.isEmpty()){return;}ui->listWidget->addItem(str);
}
刪除按鈕同理,用takeitem刪除選中項
void MainWindow::on_btndel_clicked()
{int row =ui->listWidget->currentRow();if(row<0){qDebug()<<"沒有選中任何項";return;}qDebug()<<"第"<<row<<"行已被刪除";ui->listWidget->takeItem(row);
}
完整代碼如下:?
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QString>
#include<QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);ui->listWidget->addItem("c++");ui->listWidget->addItem("java");ui->listWidget->addItem("好好學習");//連接槽函數,這里連接槽函數是不對的,在ui界面點擊轉到槽是默認有鏈接的,用connect會重復出發信號導致出錯//connect(ui->btnclicked,&QPushButton::clicked,this,&MainWindow::on_btnclicked_clicked);// connect(ui->btndel,&QPushButton::clicked,this,&MainWindow::on_btndel_clicked);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_btndel_clicked()
{int row =ui->listWidget->currentRow();if(row<0){qDebug()<<"沒有選中任何項";return;}qDebug()<<"第"<<row<<"行已被刪除";ui->listWidget->takeItem(row);
}//將plainedit里面的文本加進listwidget
void MainWindow::on_btnclicked_clicked()
{//獲取lineediter里面的文本QString str=ui->lineEdit->text();//如果內容為空,不執行if(str.isEmpty()){return;}ui->listWidget->addItem(str);
}//當前項變化
void MainWindow::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{if(current!=nullptr){qDebug()<<"當前項為:"<<current->text();}if(previous!=nullptr){qDebug()<<"之前項為:"<<previous->text();}
}