36

我是这个 Qt 模型/视图框架的新手。在我的应用程序中,我想要 1000 X 1000 个单元格。应该有最低的内存要求并且应该很快。我不知道这个模型术语是干什么用的。但是我有自己的类,它知道如何处理存储在表中的双变量。目前我正在使用带有验证器的 QLineEdit 来创建单元格数组。但是对于 > 50 X 50 的单元格来说,它太慢了。所以我决定采用旧的 MS Excel 方式。

那么我应该使用哪个小部件:QTableWidgetQTableView

谁能简要解释一下这个模型/视图框架是什么?我不是计算机科学专业的人,因此我发现很难理解...

4

2 回答 2

29

cmannett85 的推荐是不错的。阅读文档大约十几次。

然后,如果性能和内存问题是您最关心的问题,并且您认为您可以超越 QTableWidget 实现,那么您正在寻找QAbstractTableModelQStandardItemModel之上的QTableView接口。

由于您不熟悉 Qt 的模型视图架构,因此我建议您使用 QStandardItemModel,直到您觉得自己掌握了窍门。如果您的性能仍然不够好,请通过实施您的自定义模型来避免大量内存重复和浪费的对象。另外,给自己买一本好教科书,阅读它关于模型视图框架的章节大约 12 遍。恕我直言,仅这一部分就值金子了。

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

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

如果您觉得既便宜又勇敢,请查看有关实施您自己的自定义模型的摘录。一次使用一个功能,并在您使用时使用它。

于 2013-03-08T18:33:09.617 回答
18

要了解该框架,请从有关它的文档开始。它开始缓慢,但变得适度广泛并涵盖了所涉及的大部分课程。

QTableWidget 还是 QTableView?

一旦你阅读了文档,你就会明白为什么这个问题没有任何意义: aQTableWidget 使用aQTableView来显示数据。 QTableWidget(以及QTreeWidget等)使用 MVC 框架,但它将所有内容封装到一个方便的包中,用于大多数用途,但如果你需要做一些不同的事情,你将不得不将它破解成它的组件并重新实现你的位需要。

于 2013-03-08T09:49:48.280 回答