
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QFileSystemModel>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_addDirButton_clicked();
void on_removeFileDir_clicked();
private:
Ui::Widget *ui;
QFileSystemModel * model;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QInputDialog>
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
model = new QFileSystemModel(this);
model->setReadOnly(false);
/*
* Sets the directory that is being watched by the model to newPath
* by installing a file system watcher on it. Any changes to files
* and directories within this directory will be reflected in the model.
* */
model->setRootPath(QDir::currentPath());
ui->treeView->setModel(model);
ui->treeView->setAlternatingRowColors(true);
QModelIndex index = model->index(QDir::currentPath());
ui->treeView->expand(index);
ui->treeView->scrollTo(index);
ui->treeView->resizeColumnToContents(0);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_addDirButton_clicked()
{
QModelIndex index = ui->treeView->currentIndex();
if (!index.isValid())
return;
QString dirName = QInputDialog::getText(this,
"Create Directory",
"Directory name");
if(!dirName.isEmpty()){
if(!model->mkdir(index,dirName).isValid()){
QMessageBox::information(this, "Create Directory",
"Failed to create the directory");
}
}
}
void Widget::on_removeFileDir_clicked()
{
QModelIndex index = ui->treeView->currentIndex();
if (!index.isValid())
return;
bool ok;
//Check if it's a dir or file that you are deleting
if (model->fileInfo(index).isDir()) {
ok = model->rmdir(index);
} else {
ok = model->remove(index);
}
if (!ok)
QMessageBox::information(this, "Delete",
QString("Failed to delete %1").arg(model->fileName(index)));
}