[[qtree]]
 
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QTreeWidget>
 
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 <QDir>
#include <QDateEdit>
#include <QTextEdit>
#include <QLabel>
#include <QWebEngine>
#include <iostream>
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));
        }
        */
    }
}
 
qtree.txt · Last modified: 2019/03/05 15:10 by 147.32.8.110
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki