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

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

相关推荐
hqwest2 小时前
码上通QT实战20--监控页面12-获取灯珠状态
qt·modbus·开关量·功能码01·线圈状态
艾莉丝努力练剑3 小时前
【QT】环境搭建收尾:认识Qt Creator
运维·开发语言·c++·人工智能·qt·qt creator·qt5
Larry_Yanan3 小时前
Qt安卓开发(二)摄像头打开
android·开发语言·数据库·c++·qt·ui
枫叶丹44 小时前
【Qt开发】Qt系统(六)-> Qt 线程安全
c语言·开发语言·数据库·c++·qt·安全
_OP_CHEN5 小时前
【从零开始的Qt开发指南】(二十一)Qt 网络编程封神指南:UDP/TCP/HTTP 全场景实战
网络·qt·http·udp·tcp·前端开发·qt网络
郝学胜-神的一滴5 小时前
深入理解Qt中的坐标系统:鼠标、窗口与控件位置详解
开发语言·c++·qt·程序人生
hqwest16 小时前
码上通QT实战12--监控页面04-绘制6个灯珠及开关
开发语言·qt·qpainter·qt事件·stackedwidget
youyicc21 小时前
Qt连接Pg数据库
开发语言·数据库·qt
楚Y6同学21 小时前
基于 Haversine 公式实现【经纬度坐标点】球面距离计算(C++/Qt 实现)
开发语言·c++·qt·经纬度距离计算
江公望1 天前
QT/QML qmlRegisterType()函数浅谈
开发语言·qt