#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 slots: void on_actionQuit_triggered(); void on_actionTest_triggered(); void on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H #include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include #include using namespace std; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->tabWidget->clear(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_actionQuit_triggered() { close (); } void showDir (QTreeWidgetItem * target, QDir dir) { auto branch = new QTreeWidgetItem; branch->setText (0, dir.dirName()); QString s = dir.canonicalPath(); branch->setToolTip (0, s); branch->setData (0, Qt::UserRole, s); branch->setForeground (0, QColor ("red")); branch->setIcon (0, QIcon::fromTheme ("folder")); target->addChild(branch); QFileInfoList list = dir.entryInfoList (QDir::AllEntries | QDir::NoDotAndDotDot); for (QFileInfo file : list) { if (file.isDir()) { showDir (branch, QDir (file.filePath())); } else { auto node = new QTreeWidgetItem; node->setText (0, file.fileName()); QString t = file.absoluteFilePath(); node->setToolTip (0, t); node->setData (0, Qt::UserRole, t); node->setForeground (0, QColor ("blue")); if (file.fileName().endsWith(".png") && file.size() <= 64*1024) node->setIcon (0, QIcon (file.filePath())); else node->setIcon (0, QIcon::fromTheme ("document-open")); node->setText (1, QString::number (file.size())); node->setText (2, file.lastModified().toString ("yyyy-MM-dd HH:mm:ss")); branch->addChild (node); } } } void MainWindow::on_actionTest_triggered() { QIcon::setThemeName("mate"); ui->treeWidget->setColumnCount(3); QStringList names; names << "Name" << "Size" << "Date"; ui->treeWidget->setHeaderLabels(names); QDir d ("/usr/share/icons/mate"); // QDir d ("."); QDir dir (d.canonicalPath()); showDir (ui->treeWidget->invisibleRootItem(), dir); } void MainWindow::on_treeWidget_itemDoubleClicked (QTreeWidgetItem *item, int column) { QString p = item->data(0, Qt::UserRole).toString(); if (p != "") { QFileInfo info (p); QString ext = info.completeSuffix(); if (ext == "txt" || ext == "h" || ext == "c" || ext == "cpp") { QTextEdit * edit = new QTextEdit (); int inx = ui->tabWidget->addTab (edit, info.fileName()); ui->tabWidget->setCurrentIndex(inx); QFile file (p); if (file.open(QFile::ReadOnly)) { QByteArray data = file.readAll(); QString text = data; edit->setText(text); } } else if (ext == "png") { QLabel * widget = new QLabel (); int inx = ui->tabWidget->addTab (widget, info.fileName()); ui->tabWidget->setCurrentIndex(inx); widget->setPixmap(QPixmap(p)); } /* else if (ext == "html") { QWebEngine * widget = new QWebEngine (); int inx = ui->tabWidget->addTab (widget, info.fileName()); ui->tabWidget->setCurrentIndex(inx); widget->setPixmap(QPixmap(p)); } */ } }