当前位置: 首页 > news >正文

QListWedget控件使用指南

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)启用或禁用自动排序功能(enabletrue时,添加项会自动按排序规则插入)。
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 &currentText)当当前选中项的文本发生变化时触发。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)设置是否隐藏项(hidetrue时隐藏)。
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();}
}

相关文章:

  • 远程连接电脑的方法?异地远程桌面连接和三方软件实现
  • 海康平台对接关键类
  • Ubuntu摄像头打开失败
  • 4.重建大师菜单栏介绍
  • Solana数据索引问题与解决方案
  • Nginx+Lua 实战避坑:从模块加载失败到版本冲突的深度剖析
  • spark中的转换算子
  • 固定步长和变步长的LMS自适应滤波器算法
  • Qwen集成clickhouse实现RAG
  • WK-F01和WK-F02以及WK-F01在电动三轮车和休闲三轮上的应用比较
  • JVM 与云原生的完美融合:引领技术潮流
  • Qt file文件操作详解
  • 密西根大学新作——LightEMMA:自动驾驶中轻量级端到端多模态模型
  • 服务器时间发生跳变导致hghac中对应主机状态频繁切换为crash或stop
  • OSS-承载数据的巨轮
  • Qt功能区:简介与安装
  • MCU ESP32-S3+SD NAND(贴片式T卡):智能皮电手环(GSR智能手环)性能与存储的深度评测
  • 基于C#实现中央定位服务器的 P2P 网络聊天系统
  • deepseek梳理java高级开发工程师算法面试题
  • windows文件共享另一台电脑资源管理器网络文件夹无法找到机器
  • 中央宣传部、全国妇联联合发布2025年“最美家庭”
  • 观察|“双雄”格局下电池制造商如何生存:加码不同技术、抢滩新赛道
  • 云南大理铁路枢纽工程建设取得两大进展,预计明年建成
  • 多地再发网约车从业及投资风险提示:避免盲目花费大笔资金“购车”入行
  • 韩德洙成为韩国执政党总统大选候选人
  • 上海杨浦:优秀“博主”购房最高可获200万补贴