如何在QFileSystemModel中添加自定义行?

时间:2012-01-16 20:23:48

标签: qtreeview qfilesystemmodel

我使用QFileSystemModel通过QTreView表示文件结构。一切正常,但我需要在树的某个级别添加一行。例如现在是:

-root

- ROW1

- ROW2

- ROW3

所有这些行都从文件系统映射文件夹/文件。 我需要:

-root

- ROW1

- ROW2

- ROW3

- 自定义行

因此自定义行不表示来自文件系统的任何数据。我只需要在这里添加我自己的数据。 我从互联网上读了很多东西,人们建议使用代理模型并重新实现rowCount(),data()和flags()函数。我试图这样做(使用从QSortFilterProxyModel派生的类),但我从来没有在data()和flags()函数中得到我的行。似乎需要从源模型中获取数据。

QVariant AddonFilterModel::data (const QModelIndex & index, int role) const
{
    if(role == Qt::DisplayRole && index.row() == FilterModel::rowCount(index))
    {
        return QString("Add-Ons");
    }

    return FilterModel::data(index, role);
}

Qt::ItemFlags AddonFilterModel::flags(const QModelIndex & index) const
{
    if (!index.isValid())
        return 0;

    if (index.row() == FilterModel::rowCount(index))
    {
        return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
    }

    return FilterModel::flags(index);
}

int AddonFilterModel::rowCount(const QModelIndex &parent) const
{
    int count = FilterModel::rowCount(parent);

    if(parent == this->getRootIndex())
    {
        return count+1;
    }
    return count;
}

使用从QAbstractProxyModel派生的类是不可接受的,因为我需要QSortFilterProxyModel()的过滤函数。

此外,我已尝试重新实现QFileSystemModel的rowCount()以直接在模型中进行更改,但我从QT代码中获得“数组超出范围”错误。

我尝试过insertRow()方法,但它无效。我认为因为QFileSystemModel是只读的。

有没有人遇到这个问题?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

迟到的答案。你必须继承Qabstractitemmodel。