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 在处理大型表格时可能需要虚拟化或分页

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

相关推荐
luoyayun3612 小时前
Qt + FFmpeg 音频工具:重采样实现
qt·ffmpeg·重采样
小短腿的代码世界20 小时前
Qt Bluetooth源码深度解析:从HCI协议到跨平台API的完整架构
开发语言·qt·架构
小短腿的代码世界21 小时前
Qt WebEngine多进程架构与IPC通信:从Chromium多进程到Qt信号槽融合
qt·架构·系统架构
尘中远1 天前
【Qwt 7.0 系列】快速入门与核心新特性概览 —— 更现代的 Qt 数据可视化库
qt·数据可视化·绘图·qwt·科学绘图
初阳7851 天前
【Qt】系统相关(3)——多线程
qt
初阳7851 天前
【Qt】系统相关(2)——文件
开发语言·qt
尘中远2 天前
【Qwt 7.0 系列】坐标轴与刻度系统 —— 刻度引擎、网格、图例与刻度朝内
qt·数据可视化·qcustomplot·qwt·工业软件·科学绘图
sycmancia2 天前
Qt——多线程间的互斥
开发语言·qt
尘中远2 天前
【Qwt 7.0 系列】常用图表类型实战 —— 柱状图、散点图、箱线图与直方图
qt·qwt·工业软件·科学绘图
尘中远2 天前
【Qwt 7.0 系列】交互功能详解 —— 平移、缩放、坐标轴交互与数据拾取
qt·数据可视化·绘图·qcustomplot·qwt·科学绘图