QListview, QTreeview, который подходит для показа файлов в списке - PullRequest
1 голос
/ 30 марта 2011

Мне нравится показывать файлы, как в проводнике Windows или любом другом файловом менеджере с Qt в списке.Это не было проблемой при использовании QFilesystemModel и QListView, но не было таких столбцов, как размер или дата последнего изменения.Затем я попытался использовать QTreeView, и теперь появились столбцы, но, к сожалению, для перемещения в файловую систему каждый раз, когда папка расширяется, а не так, как это делают файловые менеджеры, показывается только содержимое фактической папки.

Как я могу получитьколонки и навигация в стиле списка?

Спасибо за ваши ответы.

1 Ответ

2 голосов
/ 30 марта 2011

Если я вас правильно понимаю, вам нужны несколько столбцов (которые 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...