0

我想知道您对 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 链接到“宠物主人”行中的项目。

你会怎么做?

4

0 回答 0