通过源模型返回标志会使我的项目处于非活动状态(灰色)

时间:2011-12-02 10:00:24

标签: c++ qt qabstractitemmodel

flags虚拟方法中基础为QSortFilterProxyModel的代理模型中:

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;
    }
}

如果函数如上所示(IDENTICAL为模型版本...只是复制并粘贴),则项目会正确显示。但是,如果我更改此方法的def以使用sourceModel()

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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