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

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

相关推荐
范特西.i4 天前
QT聊天项目(8)
开发语言·qt
枫叶丹45 天前
【Qt开发】Qt界面优化(七)-> Qt样式表(QSS) 样式属性
c语言·开发语言·c++·qt
十五年专注C++开发5 天前
Qt deleteLater作用及源码分析
开发语言·c++·qt·qobject
kangzerun5 天前
SQLiteManager:一个优雅的Qt SQLite数据库操作类
数据库·qt·sqlite
金刚狼885 天前
qt和qt creator的下载安装
开发语言·qt
追烽少年x5 天前
Qt中使用Zint库显示二维码
qt
谁刺我心5 天前
qt源码、qt在线安装器镜像下载
开发语言·qt
金刚狼885 天前
在qt creator中创建helloworld程序并构建
开发语言·qt
扶尔魔ocy5 天前
【转载】QT使用linuxdeployqt打包
开发语言·qt
YxVoyager6 天前
在VS2017中使用Qt的foreach宏,IntelliSense无法正确识别函数定义
c++·qt