首页 > 其他分享 >Qt QTableView和QTableWidget之间的联系 和 区别?什么时候该用QTableView,什么时候该用QTableWidget?

Qt QTableView和QTableWidget之间的联系 和 区别?什么时候该用QTableView,什么时候该用QTableWidget?

时间:2024-03-18 09:56:35浏览次数:26  
标签:该用 表格 数据源 QTableWidget QTableView 数据模型 自定义

QTableView 和 QTableWidget 是 Qt 中用于显示和编辑表格数据的两个不同的部件,它们之间存在一些重要的区别:

一、主要区别是:QTableView可以使用自定义的数据模型来显示内容(也就意味着使用时先要通过setModel来绑定数据源),而QTableWidget则只能使用 标准的数据模型。

二、不同角度看:

1. 数据模型方面:
  QTableView 使用 Qt 的模型\视图架构(Model-View Architecture)。它需要与一个数据模型(通常是 QAbstractTableModel 或其子类)一起使用,以管理和呈现表格数据。数据模型负责存储和提供数据,而视图部件负责显示和交互。
  QTableWidget 是一个自包含的部件,不需要外部数据模型。它直接管理和存储表格数据,而不需要额外的模型。

2. 使用场景区别:
  QTableView 通常更灵活和强大,适用于复杂的表格数据和需要高度定制的场景。但使用它需要编写更多的代码,包括自定义数据模型和委托(Delegate)来自定义表格外观和交互。
  QTableWidget 更容易上手,特别适用于快速创建简单的表格。你无需创建额外的数据模型或委托,可以直接在 QTableWidget 中添加、编辑和删除表格数据。

3. 是否能绑定数据源:
  QTableView 可以连接到各种不同的数据源,包括数据库、自定义数据结构、CSV 文件等。你可以根据需要实现自定义的数据模型来处理这些数据源。
  QTableWidget 仅适用于小型表格或简单数据,因为它不支持直接连接到复杂的数据源。你需要手动将数据添加到 QTableWidget 中。

4. 性能方面:
  QTableView 在处理大量数据时可能具有更好的性能,因为它支持按需加载数据,并且可以优化内存使用。
  QTableWidget 在处理大量数据时可能占用更多内存,因为它将数据直接存储在部件中。对于大型数据集,QTableView 更适合。

5. 自定义性:
  QTableView 允许你在视图上应用更高级的自定义,包括自定义单元格渲染、编辑委托、行列排序、过滤等。这使得它适用于更复杂的定制需求。
  QTableWidget 的自定义性相对有限,适合较简单的表格需求,但可能无法满足复杂的需求。

三、总结

  总之,QTableView 适用于需要处理复杂、大型数据集和具有高度定制需求的表格应用,而 QTableWidget 更适用于简单的、快速创建的表格,特别是对于小型数据集和无需复杂数据模型的场景。你的选择将取决于项目的需求和复杂性。

具体:

3.1 如果需要类似“自绘”功能(不同列或单元格显示不同颜色、功能:QSpintBox\checkbox\edit\link等功能)=》使用QTableView + 数据模型Model + 自定义代理\委托;

3.2 如果什么特殊功能都不要,只是简单的显示一个表格=》使用QTableWidget就够用!

如下图:在表格中的某列使用QComboBox,所以使用QTableView

 如下图:普通表格,使用QTableWidget

1 //开始添加一行
2 ui.tableWidget->insertRow(0);
3 ui.tableWidget->setItem(0, 0, new QTableWidgetItem("new row 0"));
4  
5 //插入QIcon 图片
6 ui.tableWidget->setItem(0, 1, new QTableWidgetItem("new row 1"));
7 ui.tableWidget->item(0, 1)->setIcon(QIcon("test.jpg"));

标签:该用,表格,数据源,QTableWidget,QTableView,数据模型,自定义
From: https://www.cnblogs.com/ybqjymy/p/18079726

相关文章

  • PostgreSQL应该用哪个时区表示符?
    PG中国用哪个时区标识符?在linux中使用timedatectl查看时间,可以看到localtime中时区是CST。$timedatectlLocaltime:Mon2024-03-0418:19:54CSTUniversaltime:Mon2024-03-0410:19:54UTCRTCtime:Mon2024-03-0410:19:53Timezone:Asia/Shanghai(CST,+......
  • QTableWidget指定某行某列只能输入数字
    主要通过给QTableWidget设置代理,即继承QItemDelegate类重写其中的方法实现,具体代码如下:1/**2*@fileNonNegativeNumberItemDelegate.h3*@brief非负整数校验代理4*@author禅元天道([email protected])5*@date2024-01-246*/7#ifndefNONNE......
  • Qt QTableView和QStandardItemModel模糊搜索出现的文本及隐藏顶层节点
    前言使用Qt进行开发时,树结构一般是使用QTreeWidget或使用QTreeView+QStandardItemModel结合。查找如果要进行查找树的所有项中,是否包含某文本,就需要遍历。QTreeWidget查找以下是使用QTreeWidget进行查找:首先初始化一些树结构QTreeWidget*pTW=newQTreeWidget(this);......
  • 做私域是该用企业微信还是个人微信呢?
    还在认为做私域就是加人、拉群和发圈吗?这理解太片面了!腾讯官方解释私域是“维护长远而忠诚的客户关系”,为用户提供价值和有价值的服务,才是私域运营的核心。......
  • [Qt] QTableView 点击左上角重新排序
    QSortFilterProxyModel的排序函数如果column是-1时可以重置通过findChild找到QTableView左上角的button//cornerbuttonoftableviewautocornerBtn=view->findChild<QAbstractButton*>();//donotselectallwhenclickedcornerBtn->disconnect();......
  • 数据分析该用什么工具?
    数据分析可以使用多种工具,常见的包括Excel、Python(如pandas、NumPy、Matplotlib等库)、R语言、Datainside、PowerBI等。这些工具各有特点,选择哪个工具取决于具体的需求、数据类型、分析目的以及个人偏好。Excel:优势:易学易用,适合快速数据处理和简单分析,具备较强的数据可视化功能......
  • QT高级(1)QTableView自定义委托集合,一个类实现若干委托
    @目录1同系列文章2功能3源码1同系列文章QT中级(1)QTableView自定义委托(一)实现QSpinBox、QDoubleSpinBox委托QT中级(2)QTableView自定义委托(二)实现QProgressBar委托QT中级(3)QTableView自定义委托(三)实现QCheckBox委托并且将QCheckBox居中QT中级(4)QTableView自定义委托(四)实现QDateTi......
  • 模型视图简介、QListWidget、QTreeWidget、QTableWidget、QStringListModel、QFileSys
    一、模型视图简介   有时,我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应用程序的界面中。早期的Qt要实现这个功能,需要定义一个组件,在这个组件中保存一个数据对象,比如一个列表。我们对这个列表进行查找、插入等的操作,或者把修改的地方写回,然后......
  • pyqt5-QTableWidgetItem表格单元格组件
    1、介绍QTableWidgetItem,表格单元格组件。QTableWidgetItem(type:int=QTableWidgetItem.ItemType.Type)QTableWidgetItem(text:str,type:int=QTableWidgetItem.ItemType.Type)QTableWidgetItem(icon:QIcon,text:str,type:int=QTableWidgetItem.ItemType.Type)......
  • pyqt5-QTableWidget表格组件
    1、介绍QTableWidget,表格组件。2、行和列setColumnCount(self,columns:int)设置表格的列数,默认是0如果列数为0,则不会显示行,即使行数不为0columnCount(self)->int返回表格的列数setRowCount(self,rows:int)设置表格的行数rowCount(self)->int返回表格的......