Qt:QListWidget
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始终可见 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性