【发布时间】:2014-02-19 12:20:57
【问题描述】:
在下面的示例中,每个子项只有 1 列,尽管它应该有 2 列。
(MyTreeModel 是 QAbstractItemModel 的子类。)
int MyTreeModel::columnCount( const QModelIndex &rParent /*= QModelIndex()*/ ) const
{
if (rParent.isValid())
{
return 2;
}
else
{
return 1;
}
}
在以下示例中,QTreeView 按预期显示 2 列父项和 1 列子项。
int MyTreeModel::columnCount( const QModelIndex &rParent /*= QModelIndex()*/ ) const
{
if (rParent.isValid())
{
return 1;
}
else
{
return 2;
}
}
因此,似乎子项的列数受到其父项的列数的限制。这是标准行为吗?我是不是做错了什么?
【问题讨论】:
-
我猜
QTreeView根据根项目值检测所需的列数。出于性能原因,它不能遍历整个树来检测列数。验证它的最佳方法是选择QTreeView的源代码。 -
@MarekR 100% 正确。仅针对根项目计算列数。如果您在任何行中需要更少的列 - 只需不要填充它们并在 ::index 中返回无效的 QModelIndex
-
@Marek R 它确实遍历整个树以检测列数(我使用断点检查了它)。但它不会为大于父级列数的列调用 MyTreeModel 中的 data(..) 函数