在以下示例中,每个子项目只有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;
}
}
因此,似乎子项的列数受其父项的列号限制。这是标准行为吗?我做错了吗?
答案 0 :(得分:4)
我在https://qt.gitorious.org/检查了源代码(当前没有替代https://github.com/qtproject/qtbase/blob/dev/src/widgets/)并找到了如下答案:
void QTreeView::setModel(QAbstractItemModel *model)
。在那里我注意到了行d->header->setModel(model);
。标题是你需要的。 QHeaderView
。 void QHeaderView::setModel(QAbstractItemModel *model)
QObject::disconnect(d->model, SIGNAL(columnsInserted(QModelIndex,int,int)), this, SLOT(sectionsInserted(QModelIndex,int,int)));
void QHeaderView::sectionsInserted(const QModelIndex &parent, int logicalFirst, int logicalLast)
猜猜我在那里找到了什么:
void QHeaderView::sectionsInserted(const QModelIndex &parent,
int logicalFirst, int logicalLast)
{
Q_D(QHeaderView);
if (parent != d->root)
return; // we only handle changes in the top level
因此,只有顶级项目会对列数产生影响。