我想知道您对 QStandardItemModel 最佳实践的看法,他们的顶级项目可能包含在另一个视图中最好地表示的子项 - 并且谁的水平标题标签可能需要与子项完全不同。
让我们举一个例子,我们有 QTreeViewA 和 QTreeViewB。
需要明确的是,这不是一个字面的例子。在我的实际程序中,QTreeViewA 中顶级项的数量永远不会超过 10,而 QTreeViewB 中的子项通常少于 50 个。表示的数据是通过 JSON 加载和保存的。
在 QTreeViewA 中,我们想要列出宠物主人和一些人口统计信息,但是当我们展开项目时,我们想要查看他们的宠物列表:
Pet Owner Name | Age | Gender | Location
-----------------------------------------------------------------
[+] Rich | 18 | M | Los Angeles, CA
[-] Jane | 25 | F | San Francisco, CA
Dog | Border Collie
Dog | Golden Retriever
[-] Jim | 83 | M | London, UK
Cat | Calico
在 QTreeViewB 中,我们希望在选择 QTreeViewA 中的 Pet Owner 时填充视图的项目并显示一些附加信息。
QTreeViewB 看起来像:
Pet Type | Breed | Fur Color | Age | Eye Color
------------------------------------------------------------------
Dog | Border Collie | Black & White | 5 | Blue
Dog | Golden Retriever | Golden | 7 | Brown
我在设置构建模型的最佳实践时遇到了一些麻烦。
如果我只使用相同的模型,并将宠物的 QStandardItems 设置为所有者的 QStandardItems 的子项 - 我无法找到有关如何将 QTreeViewB 的水平标题标签更改为不同于 QTreeViewA 的信息,因为他们是同一个型号。
这让我问这个问题,这通常是错误的方法吗?你会如何推荐某人构建一个像这样的不合格层次模型?我是否使模型过于复杂,我应该有多个模型吗?
但是,在我的特殊情况下,我应该补充一下——我实际上不需要表示除 treeViewA 中的第一列之外的任何内容。在我的真实示例中 - 当“宠物主人”项目被选中时,QTreeViewB 被填充,但其他几个 QLineEdit/QComboBox/QSpinBox 小部件也被填充,这些小部件使用 QDataWidgetMapper 链接到“宠物主人”行中的项目。
你会怎么做?