我使用树/表模型(继承自QStandardItemModel)和几个视图用于不同目的。
模型的某些行具有子行,其中一些行也可能有子等等。
在QTreeView中,我想只显示顶级行和他们的“一级孩子” - 孙子和他们的孩子应该被隐藏。
我该怎么做?
答案 0 :(得分:2)
您需要使用QSortFilterProxyModel。
看一下例子
bool YourQSortFilterProxyModel::filterAcceptsRow ( int source_row, const QModelIndex & source_parent ) const
{
if (source_parent == qobject_cast<QStandardItemModel*>(sourceModel())->invisibleRootItem()->index())
{
// always accept children of rootitem, since we want to filter their children
return true;
}
return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
}
答案 1 :(得分:0)
我的工作解决方案,基于Vladislav Mikitich的回复:
bool ArchiveQSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
if (source_parent == qobject_cast<QStandardItemModel*>(sourceModel())->invisibleRootItem()->index())
{
// always accept children of rootitem, since we want to filter their children
return true;
}
if (source_parent.parent() == qobject_cast<QStandardItemModel*>(sourceModel())->invisibleRootItem()->index())
{
return true;
}
if (source_parent.parent().parent() == qobject_cast<QStandardItemModel*>(sourceModel())->invisibleRootItem()->index())
{
return false;
}
return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
}