C++ QListview,QTreeview,用于在列表中显示文件

C++ QListview,QTreeview,用于在列表中显示文件,c++,qt,file,qt4,filesystems,C++,Qt,File,Qt4,Filesystems,我喜欢在Windows资源管理器或任何其他文件管理器中使用Qt在列表中显示文件。使用QFilesystemModel和QListView没有问题,但是没有像大小或上次修改日期这样的列。接下来我尝试使用QTreeView,现在出现了列,但不幸的是,每次文件夹扩展时都会移动到文件系统中,而不像文件管理器那样,只显示实际文件夹的内容 如何拥有列和listviewstyle导航 谢谢您的回答。如果我理解正确,您希望有多个列(QListView不支持),但需要一个没有子文件夹内容的平面列表?这对我来说很有

我喜欢在Windows资源管理器或任何其他文件管理器中使用Qt在列表中显示文件。使用QFilesystemModel和QListView没有问题,但是没有像大小或上次修改日期这样的列。接下来我尝试使用QTreeView,现在出现了列,但不幸的是,每次文件夹扩展时都会移动到文件系统中,而不像文件管理器那样,只显示实际文件夹的内容

如何拥有列和listviewstyle导航


谢谢您的回答。

如果我理解正确,您希望有多个列(QListView不支持),但需要一个没有子文件夹内容的平面列表?这对我来说很有用,在OS X上测试: 它使用setRootIndex隐藏根文件夹(本例中为“/”),并使用代理模型筛选根节点子节点的所有子节点

#include <QApplication>
#include <QFileSystemModel>
#include <QTreeView>
#include <QSortFilterProxyModel>

class Proxy : public QSortFilterProxyModel {
public:
    explicit Proxy( QObject* parent=0 ) : QSortFilterProxyModel( parent ) {}
    bool filterAcceptsRow( int, const QModelIndex& parent ) const {
        return !parent.parent().isValid();
    }
};

int main( int argc, char** argv ) {
    QApplication app( argc, argv );
    QFileSystemModel model;
    Proxy proxy;
    proxy.setSourceModel( &model );
    const QModelIndex rootIdx = proxy.mapFromSource( model.setRootPath( QLatin1String("/") ) );
    QTreeView view;
    view.setModel( &proxy );
    view.setRootIndex( rootIdx );
    view.setRootIsDecorated( false );
    view.show();
    return app.exec();
}
#包括
#包括
#包括
#包括
类代理:公共QSortFilterProxyModel{
公众:
显式代理(QObject*parent=0):QSortFilterProxyModel(parent){}
布尔过滤器AcceptsRow(int、const QModelIndex和parent)const{
return!parent.parent().isValid();
}
};
int main(int argc,字符**argv){
QApplication应用程序(argc、argv);
QFileSystemModel模型;
代理;
proxy.setSourceModel(&model);
const QModelIndex rootIdx=proxy.mapFromSource(model.setRootPath(QLatin1String(“/”));
QTreeView视图;
view.setModel(&proxy);
view.setRootIndex(rootIdx);
view.setRootIsDecorated(false);
view.show();
返回app.exec();
}