QListview,QTreeview,它是在列表中显示文件的权利

时间:2011-03-30 17:51:35

标签: c++ qt file qt4 filesystems

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

我如何拥有列和listviewstyle导航?

感谢您的回答。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你想要多列(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();
}