#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; void showDir (QTreeWidgetItem * target, QString path, int level); }; #endif // MAINWINDOW_H #include "mainwindow.h" #include "ui_mainwindow.h" #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QDir d ("/usr/share/icons"); showDir(nullptr, d.absolutePath(), 5); // ui->treeWidget->expandAll (); ui->tabWidget->clear(); // ui->tabWidget->addTab(new QPushButton, "knoflik"); } void MainWindow::showDir(QTreeWidgetItem *target, QString path, int level) { QDir dir (path); QTreeWidgetItem * root = new QTreeWidgetItem; root->setText (0, dir.dirName()); root->setToolTip (0, dir.absolutePath()); root->setForeground(0, QColor ("red")); root->setIcon(0, QIcon::fromTheme("folder")); if (target == nullptr) ui->treeWidget->addTopLevelItem (root); else target->addChild (root); for (QFileInfo info : dir.entryInfoList (QDir::AllEntries | QDir::NoDotAndDotDot, QDir::Name) ) { if (info.isDir()) { if (level > 1) showDir (root, info.absoluteFilePath(), level-1); } else { QTreeWidgetItem * item = new QTreeWidgetItem; item->setText (0, info.fileName()); item->setToolTip (0, info.absoluteFilePath()); item->setForeground(0, QColor ("blue")); item->setIcon(0, QIcon::fromTheme("weather-clear")); root->addChild (item); } } } #include #include void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column) { QString path = item->toolTip(0); QFileInfo info (path); QWidget * widget = nullptr; if (info.fileName().endsWith(".png")) { QLabel * label = new QLabel (); widget = label; QPixmap image (path); label->setPixmap(image); item->setIcon(0, image); } else { QTextEdit * edit = new QTextEdit; widget = edit; QFile f (path); if (f.open (QFile::ReadOnly)) { QByteArray a = f.readAll(); edit->setText(a); f.close (); } } int inx = ui->tabWidget->addTab(widget, item->text(0)); ui->tabWidget->setTabToolTip(inx, item->toolTip(0)); ui->tabWidget->setTabIcon (inx, item->icon(0)); } MainWindow::~MainWindow() { delete ui; }