2012-01-16 180 views
4

我正在使用QFileSystemModel来表示通过QTreView的文件结构。一切工作正常,但我需要在树的某个级别添加一个额外的行。例如现在是:如何在QFileSystemModel中添加自定义行?

-root

--row1

--row2

--row3

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

-root

--row1

--row2

--row3

--custom行

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

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

使用类是不能接受的,因为我需要QSortFilterProxyModel的滤波函数()。

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

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

有没有人遇到过这个问题?有任何想法吗?

回答

0

最后回答。你必须继承Qabstractitemmodel。

相关问题