QFileSystemModel и создание файлового проводника

Последнее обновление: 12.01.2024

Для отображения элементов файловой системы Qt предоставляет встроенный класс модели QFileSystemModel. Файловую систему можно представить в виде списка - файлов и папок, которые есть в определенной папке/на жестком диске, либо в виде дерева каталогов, где каждый каталог содержит файлы и другие каталоги. Для обоих представлений Qt предоставляет встроенные классы QListView (отображение в виде списка) и QTreeView (отображение в виде дерева). Используем оба представления для вывода файлов/каталогов из определенной папке. Для этого возьмем проект по типу Qt Widgets Application (то есть проект виджетов) и определим в файле main.cpp следующий код:

#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>
#include <QListView>
#include <QTreeView>
#include <QFileSystemModel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget* widget = new QWidget;
    widget->setWindowTitle("METANIT.COM");
    widget->setMinimumHeight(180);
    widget->setMinimumWidth(300);
    widget->setContentsMargins(1,1,1,1);

    QListView *listView = new QListView();  // для списка
    QTreeView *treeView = new QTreeView();  // для дерева

    // контейнер для расположения виджетов в ряд по горизонтали
    QHBoxLayout *layout = new QHBoxLayout(widget);
    // добавляем виджеты в контейнер
    layout->addWidget(listView);
    layout->addWidget(treeView);

    // модель файловой системы
    QFileSystemModel *model = new QFileSystemModel;
    // устанавливаем корневую папку
    model->setRootPath(QDir::currentPath());
    // устанавливаем модель для древовидного представления
    treeView->setModel(model);
    // устанавливаем корневой элемент
    treeView->setRootIndex(model->index(QDir::currentPath()));
    // устанавливаем модель для представления списка
    listView->setModel(model);
    // устанавливаем корневой элемент
    listView->setRootIndex(model->index(QDir::currentPath()));

    widget->show();
    return a.exec();
}

Итак, для создания интерфейса наподобие классического проводника здесь применяется компонент компоновки QHBoxLayout, который располагает QListView и QTreeView рядом друг с другом.

Вначале создаем объект QFileSystemModel

QFileSystemModel *model = new QFileSystemModel

С помощью функции setRootPath() устанавливаем для модели корневую папку, содержимое которой будет отображаться в обоих виджетах

model->setRootPath(QDir::currentPath());

Функция QDir::currentPath() возвращает текущую папку (то есть папку проекта).

Далее устанавливаем модель для древовидного представления:

treeView->setModel(model);

Затем с помощью метода setRootIndex() устанавливаем корневой элемент для treeView. Для этого применяется индекс элемента модели, который соответствует корневой папке:

treeView->setRootIndex(model->index(QDir::currentPath()));

Аналогичные действия выполняем для listView. В итоге при загрузке приложения оба представления отобразят содержимое текущей папки:

QFileSystemModel и создание файлового проводника на Qt с помощью виджетов
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850