QAbstractItemModel::columnCount - 每行的可变列数

Posted

技术标签:

【中文标题】QAbstractItemModel::columnCount - 每行的可变列数【英文标题】:QAbstractItemModel::columnCount - variable column count for each row 【发布时间】:2021-03-17 18:43:34 【问题描述】:

我们正在实现一个 QAbstractItemModel 结构,如下图所示,并希望这样做;

节点 A 包含 3 个数据列 节点 B 包含 8 个数据列 节点 C 包含 5 个数据列

但是,在查看 QAbstractItemModel::columnCount 的签名时,不清楚如何实现上述要求。很难确定节点 A 应该有 3 列,节点 B 应该有 8 列,节点 C 应该有 5 列只给出父索引。

int QAbstractItemModel::columnCount(const QModelIndex &parent = QModelIndex()) const

返回给定父项的子项的列数。

在大多数子类中,列数与父类无关。

QAbstractItemModel::columnCount

这类问题肯定可以使用 QAbstractItemModel 解决。我做错了什么或没有在想什么?感谢您对此事的任何意见。

【问题讨论】:

【参考方案1】:

我不知道这是否会对您有所帮助,但我实现了一个树模型来弄清楚如何编写模型。在我的 github 上:https://github.com/jplflyer/qt-TreeViewDemo

解决您的具体问题:您传递了一个 QModelIndex 对象,您必须找出指向的数据并使用它来确定孩子的数量。

您应该已经有了接受QModelIndex 并返回列数据的代码,因此您可以利用相同的代码来知道要返回什么。

【讨论】:

在 QAbstractItemModel::data(..) 方法中,我们为实际数据提供了 QModelIndex。在这种情况下,我觉得我们拥有返回正确数据所需的所有信息。但是,在 QAbstractItemModel::columnCount(..) 方法中,我们向父级提供了 QModelIndex。在这种情况下,我很难理解何时应该返回 3(节点 A)或 8(节点 B)或 5(节点 C)。 我不得不做很多实验。也许现在返回一个常量并做一些调试输出。查看索引真正指向的内容。

以上是关于QAbstractItemModel::columnCount - 每行的可变列数的主要内容,如果未能解决你的问题,请参考以下文章