我在做一个文件浏览器,用的是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);
}
}
};
结果是,点开那个+,会列出很多空的行,而且每次都会增加很多行。求指教,万分感谢