Qt QTreeWidget

QTreeWidget 활용해 폴더에 있는 파일 확인하기


QTreeWidget

QTreeWidget는 Qt Document에 따르면 QListView클래스에서 사용하는 것과 유사한 항목 기반 인터페이스를 표준 트리 위젯에 제공하는 편의 클래스라고 정의 되어 있다.

QTreeWidget Example(Qt Document)

즉, 위의 example과 같이 tree 형태의 Widget을 의미한다.

QTreeWidget *treeWidget = new QTreeWidget();
treeWidget->setColumnCount(1);
QList<QTreeWidgetItem *> items;
for (int i = 0; i < 10; ++i)
    items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))));
treeWidget->insertTopLevelItems(0, items);

또한, Qt Document에서는 위와 같은 형태로 구현할 수 있다고 적혀있다.

따라서 위를 응용해서 특정 폴더에 존재하는 파일을 QTreeWidget으로 출력하는 방법을 알아본다.

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDir>
#include <QDirIterator>
#include <QTreeWidgetItem>
#include <QDateTime>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:

    void on_treeWidget_itemSelectionChanged();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
     ui->treeWidget->setHeaderLabels(QStringList() << tr("Name") << tr("Size(MB)") << tr("Time"));
     ui->treeWidget->setAlternatingRowColors(true); // treewidget row별 색 설정
     ui->treeWidget->setColumnWidth(0,125);
     ui->treeWidget->setColumnWidth(1,125);
     ui->treeWidget->setColumnWidth(2,125);
     ui->treeWidget->setEnabled(true);           // treewidget 활성 비활성화 설정.

     ui->treeWidget->clear();
     QStringList filters;
     filters += "*.*";   // 모든 파일 불러오기 또는 *.txt
     QDirIterator Iterator("C:/Temp",filters, QDir::Files);  // QDir Iterator를 통해 C:/Temp 폴더에있는 파일들을 읽음
     while(Iterator.hasNext()){
         Iterator.next();
         QTreeWidgetItem *item = new QTreeWidgetItem;
         item->setText(0, Iterator.fileName());         // 파일 이름
         item->setText(1, tr("%1 Mb").arg((double)Iterator.fileInfo().size()/1048576));     // 파일 사이즈 (Mb단위 출력)
         item->setText(2, Iterator.fileInfo().lastModified().toString("yyyy/MMM/dd\thh:mm:ss"));   // 저장한 시간
         item->setText(3, Iterator.filePath());
         ui->treeWidget->addTopLevelItem(item);
     }
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_treeWidget_itemSelectionChanged()
{
    ui->lineEdit->setText(ui->treeWidget->currentItem()->text(3));
}

출력

실행결과

코드 살펴보기

1. QTreeWidget의 headerLabel을 정의

ui->treeWidget->setHeaderLabels(QStringList() << tr("Name") << tr("Size(MB)") << tr("Time"));

2. QTreeWidget의 ui를 설정

ui->treeWidget->setAlternatingRowColors(true); // treewidget row별 색 설정
ui->treeWidget->setColumnWidth(0,125);         // 각 column 별 크기 설정
ui->treeWidget->setColumnWidth(1,125);
ui->treeWidget->setColumnWidth(2,125);

3. QTreeWidget을 활성 비활성화 할 수 있게 한다.(필요 시 사용)

ui->treeWidget->setEnabled(true);           // treewidget 활성 비활성화 설정.

4. QTreeWidge 초기화

ui->treeWidget->clear();

5. QTreeWidget에 넣을 item 정의 및 삽입

QStringList filters;
     filters += "*.*";   // 모든 파일 불러오기 또는 *.txt
     QDirIterator Iterator("C:/Temp",filters, QDir::Files);  // QDir Iterator를 통해 C:/Temp 폴더에있는 파일들을 읽음
     while(Iterator.hasNext()){
         Iterator.next();
         QTreeWidgetItem *item = new QTreeWidgetItem;
         item->setText(0, Iterator.fileName());         // 파일 이름
         item->setText(1, tr("%1 Mb").arg((double)Iterator.fileInfo().size()/1048576));     // 파일 사이즈 (Mb단위 출력)
         item->setText(2, Iterator.fileInfo().lastModified().toString("yyyy/MMM/dd\thh:mm:ss"));   // 저장한 시간
         item->setText(3, Iterator.filePath());
         ui->treeWidget->addTopLevelItem(item);
     }

6. QTreeWidget에서 선택하면 LineEdit에 경로 표시해 주기

void MainWindow::on_treeWidget_itemSelectionChanged()
{
    ui->lineEdit->setText(ui->treeWidget->currentItem()->text(3));
}
  • 경로가 아닌 다른 값을 출력하고 싶으면 text(3) 부분을 수정해 준다.

태그:

카테고리:

업데이트: