0

在我的代理模型QSortFilterProxyModel中,基于flags虚拟方法:

Qt::ItemFlags File_List_Proxy::flags(const QModelIndex& index) const
{
    if(index.isValid())
    {
        return QAbstractItemModel::flags(index) | 
            Qt::ItemIsUserCheckable |
            Qt::ItemIsSelectable;
    }
    else
    {
        return Qt::NoItemFlags;
    }
}

如果函数看起来像上面那样(与模型版本相同......只是复制和粘贴),那么项目将正确显示。但是,如果我将此方法的 def 更改为使用sourceModel()

Qt::ItemFlags File_List_Proxy::flags(const QModelIndex& index) const
{
    return sourceModel()->flags(index);
}

...然后我的 listView 上的项目处于非活动状态。为什么?

4

1 回答 1

1

如果将索引映射到源模型索引会发生什么?

Qt::ItemFlags File_List_Proxy::flags(const QModelIndex& index) const
{
    return sourceModel()->flags(this->mapToSource(index));
}

因为在我看来索引与同一模型无关,所以它是无效的

于 2011-12-02T12:46:31.667 回答