欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > Qt QListWidget 总结

Qt QListWidget 总结

2025/2/22 2:10:08 来源:https://blog.csdn.net/enyp80/article/details/145660431  浏览:    关键词:Qt QListWidget 总结

Qt QListWidget 总结

1. 概述
  • QListWidget 是 Qt 中用于显示和管理列表项的控件,继承自 QListView,但提供更简单的项(Item-Based)接口。
  • 适用于简单列表场景(如文件列表、选项菜单),支持文本、图标、自定义控件等。
  • QListView 的区别:QListWidget 直接操作项,而 QListView 基于模型/视图架构,适合复杂数据。
2. 核心功能
  • 项管理:添加、删除、插入、遍历列表项(QListWidgetItem)。
  • 交互:支持单选、多选、拖放、排序、编辑。
  • 样式:可自定义项的外观(字体、颜色、图标)或嵌入完整控件。
  • 信号:响应项点击、双击、选择变化等事件。
3. 常用方法
  • 添加项
    listWidget->addItem("Item 1"); // 添加文本项
    listWidget->addItem(new QListWidgetItem(QIcon("icon.png"), "Item 2")); // 带图标
    listWidget->addItems(QStringList() << "Item 3" << "Item 4"); // 批量添加
    
  • 插入/删除项
    listWidget->insertItem(0, "Inserted Item"); // 插入到索引0
    QListWidgetItem* item = listWidget->takeItem(1); // 移除索引1的项(需手动删除)
    listWidget->clear(); // 清空所有项
    
  • 获取项
    QListWidgetItem* current = listWidget->currentItem(); // 当前选中项
    QList<QListWidgetItem*> selected = listWidget->selectedItems(); // 所有选中项
    QListWidgetItem* item = listWidget->item(2); // 获取索引2的项
    
  • 项属性
    item->setText("New Text");
    item->setCheckState(Qt::Checked); // 设置为可勾选
    item->setFlags(item->flags() | Qt::ItemIsEditable); // 允许编辑
    
4. 关键信号
  • itemClicked(QListWidgetItem*):单击项时触发。
  • itemDoubleClicked(QListWidgetItem*):双击项时触发。
  • currentItemChanged(QListWidgetItem*, QListWidgetItem*):当前项变化时触发。
  • itemSelectionChanged():选中项变化时触发。
5. 高级功能
  • 自定义项控件
    QWidget* customWidget = new QWidget();
    // 添加按钮、标签等到 customWidget...
    QListWidgetItem* item = new QListWidgetItem();
    listWidget->addItem(item);
    listWidget->setItemWidget(item, customWidget); // 将控件嵌入项
    
  • 排序与搜索
    listWidget->setSortingEnabled(true); // 启用排序(点击标题排序)
    listWidget->sortItems(Qt::AscendingOrder); // 程序触发排序
    auto items = listWidget->findItems("Key", Qt::MatchContains); // 模糊搜索
    
  • 拖放支持
    listWidget->setDragEnabled(true);
    listWidget->setAcceptDrops(true);
    listWidget->setDropIndicatorShown(true);
    
  • 样式美化
    listWidget->setStyleSheet("QListWidget { background: #f0f0f0; }""QListWidget::item { color: blue; }""QListWidget::item:selected { background: yellow; }"
    );
    
6. 性能与注意
  • 内存管理:项默认由 QListWidget 管理,无需手动释放。若动态创建项后未添加到列表,需手动删除。
  • 大数据量优化:项过多时性能下降,建议改用 QListView + QAbstractItemModel 实现虚拟滚动。
  • 自定义控件谨慎使用:大量复杂控件作为项可能导致界面卡顿。
7. 示例代码
// 创建列表并添加项
QListWidget* listWidget = new QListWidget();
listWidget->addItems(QStringList() << "Apple" << "Banana" << "Orange");// 响应项双击
connect(listWidget, &QListWidget::itemDoubleClicked, [](QListWidgetItem* item) {qDebug() << "Double-clicked:" << item->text();
});// 启用多选和排序
listWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
listWidget->setSortingEnabled(true);
8. 适用场景
  • 简单列表展示(无需复杂数据模型)。
  • 快速原型开发或小型项目。
  • 需要直接操作项而非抽象数据的场景。
9. 相关类
  • QListWidgetItem:列表项,可存储文本、图标、自定义数据(setData())。
  • QListView + QStandardItemModel:更灵活的模型/视图实现。
  • QComboBox:下拉列表的替代方案。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com