// Copyright (C) 2020 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { QApplication app(argc, argv); QCoreApplication::setApplicationVersion(QT_VERSION_STR); QCommandLineParser parser; parser.setApplicationDescription("Qt Dir View Example"); parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption dontUseCustomDirectoryIconsOption("c", "Set QFileSystemModel::DontUseCustomDirectoryIcons"); parser.addOption(dontUseCustomDirectoryIconsOption); QCommandLineOption dontWatchOption("w", "Set QFileSystemModel::DontWatch"); parser.addOption(dontWatchOption); parser.addPositionalArgument("directory", "The directory to start in."); parser.process(app); const QString rootPath = parser.positionalArguments().isEmpty() ? QString() : parser.positionalArguments().first(); QFileSystemModel *model = new QFileSystemModel(); QFileIconProvider iconProvider; model->setIconProvider(&iconProvider); model->setRootPath(""); if (parser.isSet(dontUseCustomDirectoryIconsOption)) model->setOption(QFileSystemModel::DontUseCustomDirectoryIcons); if (parser.isSet(dontWatchOption)) model->setOption(QFileSystemModel::DontWatchForChanges); QTreeView *tree = new QTreeView(); tree->setModel(model); if (!rootPath.isEmpty()) { const QModelIndex rootIndex = model->index(QDir::cleanPath(rootPath)); if (rootIndex.isValid()) tree->setRootIndex(rootIndex); } // Demonstrating look and feel features tree->setAnimated(false); tree->setIndentation(20); tree->setSortingEnabled(true); const QSize availableSize = tree->screen()->availableGeometry().size(); tree->resize(availableSize / 2); tree->setColumnWidth(0, tree->width() / 3); QWidget *l_widget = new QWidget(); QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget(tree); QFileSystemModel *model2 = new QFileSystemModel(); model2->setFilter(QDir::Files | QDir::NoDotAndDotDot); QTreeView *view = new QTreeView(); view->setModel(model2); QMainWindow *window = new QMainWindow(); window->connect(tree, &QTreeView::clicked, [=](const QModelIndex &index) { QString path = model->filePath(index); const QModelIndex rootIndex = model2->setRootPath(path); if (rootIndex.isValid()) view->setRootIndex(rootIndex); }); layout->addWidget(view); l_widget->setLayout(layout); window->show(); window->setWindowTitle(QObject::tr("Dir View")); window->setCentralWidget(l_widget); return app.exec(); }