Qt QFileSystemModel QDirModel 示例代码, 使用方法

1.  QFileSystemModel 查看,添加 和 删除目录

2. 实现代码

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QtGui>

class Dialog : public QDialog
{
    Q_OBJECT
    
public:
    Dialog(QWidget *parent = 0);

private slots:
    void createDirectory();
    void remove();

private:
    QFileSystemModel *model;
    QTreeView *treeView;

};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle("QFileSystemModel");
    model = new QFileSystemModel;
    model->setReadOnly(false);
    model->setRootPath(QDir::currentPath());

    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);

    QPushButton *createButton = new QPushButton(tr("Create Dir"));
    QPushButton *removeButton = new QPushButton(tr("Remove Dir"));
    connect(createButton, SIGNAL(clicked()), this, SLOT(createDirectory()));
    connect(removeButton, SIGNAL(clicked()), this, SLOT(remove()));

    QHBoxLayout *hLayout = new QHBoxLayout;
    hLayout->addWidget(createButton);
    hLayout->addWidget(removeButton);

    QVBoxLayout *vLayout = new QVBoxLayout;
    vLayout->addWidget(treeView);
    vLayout->addLayout(hLayout);

    setLayout(vLayout);
}

void Dialog::createDirectory()
{
    QModelIndex index = treeView->currentIndex();
    if( !index.isValid() )
        return;
    QString dirName = QInputDialog::getText(this, tr("create Dir"), tr("Dir name"));
    if( !dirName.isEmpty() )
    {
        if( !model->mkdir(index, dirName).isValid() )
            QMessageBox::information(this, tr("Create Dir"), tr("Failed to create Dir"));

    }
}

void Dialog::remove()
{
    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 Dir").arg(model->fileName(index)));
}


main.cpp

#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.setSizeIncrement(400,300);
    w.show();
    
    return a.exec();
}


 

原文地址:https://www.cnblogs.com/xj626852095/p/3648210.html