QTableWidget与QTableView比较

42

我对Qt的Model/View框架还不熟悉,在我的应用程序中,我想要有1000 X 1000个单元格,需要最小的内存要求和快速访问。我不知道"Model"这个术语是什么意思。但是我有自己的类,知道如何处理存储在表格中的双变量。目前我正在使用QLineEdit并结合Validator来创建单元格数组,但对于大于50 X 50的单元格,速度太慢了。所以我决定采用MS Excel的方式。

那么我应该使用哪个控件: QTableWidget 还是 QTableView

还有人能简单解释一下这个Model/View框架吗?我不是计算机科学专业的人,所以很难理解...


说到“MS Excel方式”,他们永远不会为每个单元格创建一个QWidget的等效物。在您的示例中,那将是1,000,000个单元格!实际上,您只需要足够多的小部件来覆盖屏幕,然后相应地移动内容即可。 - Alexis Wilke
2个回答

31

cmannett85的建议是很好的。仔细阅读文档,至少要读个十遍。

如果你的主要关注点是性能和内存问题,并且你认为你可以胜任QTableWidget的实现,那么在QTableView上添加一个QAbstractTableModelQStandardItemModel接口就是你要寻找的。

鉴于你对Qt的模型视图架构还不熟悉,我建议先使用QStandardItemModel,直到你觉得掌握了它的基本操作。如果你的性能仍然不够好,可以通过实现自己的自定义模型来减少内存重复和浪费的对象。此外,请阅读一本好的教材,并重复阅读其关于模型视图框架的章节至少12遍。在我看来,这一部分内容非常有价值。

以下是Qt自定义模型视图框架的基础知识:

  • 实际数据存储在某个列表/树中
  • 模型为查询和编辑你的数据提供了一个标准框架
  • 代理模型允许你对数据进行排序/筛选而不影响原始模型
  • 视图提供一种可视化观察和交互你的数据的方式
  • 委托(通常是可选的)调整数据的外观并为数据提供自定义编辑器

如果你既想省钱又想有勇气,可以看看这篇文章来实现自己的定制模型。一步一个函数地工作,并在过程中玩耍。


“this excerpt”链接已经失效。 - Claudiu

20
为了理解这个框架,可以从它的文档开始阅读。文档内容一开始比较简单,但随后变得相当广泛,并涵盖了大多数相关类。
QTableWidget或QTableView?
读完文档后,您就会明白为什么这个问题实际上没有任何意义:一个QTableWidget使用QTableView来显示数据。 QTableWidget(以及QTreeWidget等)使用MVC框架,但将其全部封装在一个方便的包中,适用于大多数情况,但如果您需要执行不同的操作,则必须将其分解成组件部分并重新实现所需的部分。

谢谢您读了那份文档2-3遍,开始理解它的要领了。 - Cool_Coder
4
QTableWidget使用QTableView,这实际上就是我想要的信息,谢谢。编辑:我发现QTableWidget甚至是一个QTableView - Bernhard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接