QT实现windows系统目录生成以及删除工具
1、mytreeview.hpp
#ifndef MYTREEVIEW_H
#define MYTREEVIEW_H
#include <QWidget>
#include <QtGui>
#include <QDirModel>
#include <QTreeView>
#include <QHBoxLayout>
#include <QPushButton>
#include <QInputDialog>
#include <QMessageBox>
class mytreeview : public QWidget
{
Q_OBJECT
public:
mytreeview(QWidget *parent = nullptr);
~mytreeview();
private:
QDirModel *model;
QTreeView *treeView;
private slots:
void mkdir();
void rm();
};
#endif // MYTREEVIEW_H
2、mytreeview.cpp
#include "mytreeview.h"
#include "ui_mytreeview.h"
mytreeview::mytreeview(QWidget *parent)
: QWidget(parent)
{
model = new QDirModel;
model->setReadOnly(false);
model->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);
treeView = new QTreeView;
treeView->setModel(model);
treeView->header()->setStretchLastSection(true);
treeView->header()->setSortIndicator(0, Qt::AscendingOrder);
treeView->header()->setSortIndicatorShown(true);
//treeView->header()->setClickable(true);
QModelIndex index = model->index(QDir::currentPath());
treeView->expand(index);
treeView->scrollTo(index);
treeView->resizeColumnToContents(0);
QHBoxLayout *btnLayout = new QHBoxLayout;
QPushButton *createBtn = new QPushButton(tr("Create Directory..."));
QPushButton *delBtn = new QPushButton(tr("Remove"));
btnLayout->addWidget(createBtn);
btnLayout->addWidget(delBtn);
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(treeView);
mainLayout->addLayout(btnLayout);
this->setLayout(mainLayout);
connect(createBtn, SIGNAL(clicked()), this, SLOT(mkdir()));
connect(delBtn, SIGNAL(clicked()), this, SLOT(rm()));
}
mytreeview::~mytreeview()
{
}
void mytreeview::mkdir()
{
QModelIndex index = treeView->currentIndex();
if (!index.isValid())
{
return;
}
QString dirName = QInputDialog::getText(this,
tr("Create Directory"),
tr("Directory name"));
if (!dirName.isEmpty())
{
if (!model->mkdir(index, dirName).isValid())
{
QMessageBox::information(this,
tr("Create Directory"),
tr("Failed to create the directory"));
}
}
}
void mytreeview::rm()
{
QModelIndex index = treeView->currentIndex();
if (!index.isValid())
{
return;
}
bool ok;
if (model->fileInfo(index).isDir())
{
ok = model->rmdir(index);
} else {
ok = model->remove(index);
} if (!ok) {
QMessageBox::information(this,
tr("Remove"),
tr("Failed to remove%1").arg(model->fileName(index)));
}
}
效果: