• 4858阅读
  • 2回复

[提问]如何让QFileSystemModel支持某文件包的浏览? [复制链接]

上一主题 下一主题
离线hycoldrain
 

只看楼主 倒序阅读 楼主  发表于: 2011-11-01
我在做一个文件浏览器,用的是QFileSystemModel和QTreeView做的,已经可以支持列出文件夹和文件。

现在来了个新需求,就是让浏览器支持展开某文件包的内容,如:rar,fev文件。读取文件包的接口已经提供,可以通过它得到文件包中的文件名字。

我遇到的问题是,要让这个文件包像文件夹一样可以展开:
  |
+ 文件夹
  |
+ 包

我之前用的QFileSystemModel和QTreeView,只要设置SetRootPath就可以列出文件夹。现在是想扩展QFileSystemModel。我查了很多资料,说是重写canFetch和fetchMore函数就可以显示里面的内容,但是我写了之后还是不行,+可以显示出来,但是里面的文件名字在哪添加不知道。求教了。



class CustomFileModel : public QFileSystemModel
{
Q_OBJECT
public:
bool hasChildren(const QModelIndex &parent = QModelIndex()) const
{
       if 包文件
       {
             return true;
       }
       else
       {
            return QFileSystemModel::hasChildren(parent);
        }
}
    bool canFetchMore(const QModelIndex &parent) const
{
       if 包文件
       {             return true;
       }       else
       {            return QFileSystemModel::hasChildren(parent);
        }

}
    void fetchMore(const QModelIndex &parent)
{
         if 包文件
       {
            打开包文件;
           beginInsertRows( parent, 0, 包中文件个数-1);
           endInsertRows();
       }
       else
       {
            QFileSystemModel::fetchMore(parent);
       }
}
};

结果是,点开那个+,会列出很多空的行,而且每次都会增加很多行。求指教,万分感谢


离线hycoldrain

只看该作者 1楼 发表于: 2011-11-01
自己顶
离线zhy282289
只看该作者 2楼 发表于: 2011-11-02
每次你点+时fetchMore每次都会返回true(是包的时候)所以会一直加N行,
但默认的data()不知道如何返回数据所以是空~
重写data()
为什么我脸这么胖~
快速回复
限100 字节
 
上一个 下一个