qt listview tabview 区别, 使用场景

summer:

Qt中的 QListViewQTableView 都是用于显示数据的视图控件,但它们在显示方式和适用场景上有明显区别:

核心区别对比

特性 QListView QTableView
显示维度 单列列表(一维) 多列表格(二维)
数据模型 使用列表模型 使用表格模型
布局 垂直或水平列表 行和列的网格
选择模式 单行选择为主 单元格、行、列多种选择
典型用途 简单列表、图标视图 结构化数据展示

QListView 使用场景

适合场景:

  1. 简单列表显示

    cpp

复制代码
// 文件列表、用户列表、选项列表
QStringListModel *model = new QStringListModel;
model->setStringList({"项目1", "项目2", "项目3"});
QListView *listView = new QListView;
listView->setModel(model);

图标视图

cpp

复制代码
listView->setViewMode(QListView::IconMode);
listView->setIconSize(QSize(64, 64));

单选或多选列表

cpp

复制代码
listView->setSelectionMode(QAbstractItemView::SingleSelection);
// 或 QAbstractItemView::MultiSelection
  • 导航菜单

    • 侧边栏菜单

    • 设置选项列表

    • 目录树(结合QTreeView更佳)

QTableView 使用场景

适合场景:

  1. 表格数据展示

    cpp

复制代码
QStandardItemModel *model = new QStandardItemModel(3, 3);
model->setHorizontalHeaderLabels({"姓名", "年龄", "部门"});
QTableView *tableView = new QTableView;
tableView->setModel(model);

可编辑的数据表格

cpp

复制代码
tableView->setEditTriggers(QAbstractItemView::DoubleClicked | 
                           QAbstractItemView::SelectedClicked);

需要行列操作的场景

cpp

复制代码
// 调整列宽
tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

// 排序
tableView->setSortingEnabled(true);
  1. 复杂数据展示

    • 数据库查询结果

    • Excel风格的数据表

    • 统计报表

选择建议

使用 QListView 当:

  • 只需要显示一列数据

  • 数据项较为简单(文本+图标)

  • 用作导航或选择器

  • 需要图标视图模式

  • 性能要求较高(显示大量简单项时更高效)

使用 QTableView 当:

  • 需要显示多列结构化数据

  • 数据有明确的行列关系

  • 需要单元格级别的编辑

  • 需要排序、筛选功能

  • 需要表头操作(列排序、隐藏列等)

代码示例对比

QListView 示例:

cpp

复制代码
// 创建列表视图
QListView *listView = new QListView(this);
QStringListModel *listModel = new QStringListModel(this);
listModel->setStringList(QStringList() << "苹果" << "香蕉" << "橙子");
listView->setModel(listModel);
listView->setSelectionMode(QAbstractItemView::ExtendedSelection);

QTableView 示例:

cpp

复制代码
// 创建表格视图
QTableView *tableView = new QTableView(this);
QStandardItemModel *tableModel = new QStandardItemModel(3, 2, this);
tableModel->setHorizontalHeaderLabels({"水果", "价格"});
tableModel->setItem(0, 0, new QStandardItem("苹果"));
tableModel->setItem(0, 1, new QStandardItem("5.0"));
tableView->setModel(tableModel);
tableView->horizontalHeader()->setStretchLastSection(true);

共同特性

两个控件都:

  • 基于 Model/View 架构

  • 支持自定义委托(delegate)

  • 支持样式表定制

  • 支持拖放操作

  • 可连接到相同的数据模型(但显示效果不同)

性能考虑

  • QListView 对于大量简单项通常性能更好

  • QTableView 在处理大型表格时可能需要虚拟化或分页

选择时主要根据数据的维度和结构来决定使用哪个控件。

相关推荐
qq_401700417 分钟前
Qt 多线程编程
开发语言·qt
Hua-Jay1 小时前
OpenCV联合C++/Qt 学习笔记(二十五)----加载深度神经网络模型及深度神经网络模型的使用
c++·笔记·qt·opencv·学习·计算机视觉·dnn
小牛蛋2 小时前
vcpkg 管理 PCL + VTK + Qt 开发三维点云可视化软件
开发语言·qt
小许同学记录成长3 小时前
Qt 自研测控软件-配置测试项
开发语言·qt
郝学胜-神的一滴3 小时前
CMake 011:跨平台动态库编译
开发语言·c++·嵌入式硬件·qt·程序人生·cmake·liunx
ai安歌4 小时前
鸿蒙PC:Qt适配OpenHarmony实战【昼刻】:用 Qt Quick 做一个可运行的鸿蒙时钟应用
qt·华为·harmonyos
小短腿的代码世界21 小时前
Qt国际化深度解析:从源码到企业级多语言实践
java·数据库·qt
宠..1 天前
QComboBox 方法大全
开发语言·qt
郝学胜-神的一滴1 天前
Qt 高级开发 011: 跨线程信号槽实战
开发语言·c++·qt·程序人生·开源软件·用户界面
小短腿的代码世界1 天前
QHttpEngine深度解析:Qt嵌入式HTTP服务端的工业级架构与性能调优
qt·http·架构