QFileSystemModel的简单用法

参考<<C++ GUI Programming with Qt4>>中文版第二版中的例子"DirectoryViewer",简单介绍QFileSystemModel的用法,QFileSystemModel 类似QDitModel,只不过Qt不推荐使用QDirModel,推荐是使用QFileSystemModel,该模型允许我们在view中显示操作系统的目录结构。

directoryviewer.h文件:

#ifndef DIRECTORYVIEWER_H
#define DIRECTORYVIEWER_H

#include <QtGui/QDialog>
#include <QFileSystemModel>
#include <QTreeView>

class DirectoryViewer : public QDialog
{
    Q_OBJECT

public:
    DirectoryViewer(QWidget *parent = 0);
    ~DirectoryViewer();
private slots:
    void createDirectory();
    void remove();
private:
    QFileSystemModel *model;
    QTreeView *treeView;
};

#endif

directoryviewer.cpp文件:

#include "directoryviewer.h"
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QHeaderView>
#include <QInputDialog>
#include <QMessageBox>

DirectoryViewer::DirectoryViewer(QWidget *parent)
    : QDialog(parent)
{
    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("Create Directory", this);
    QPushButton *removeButton = new QPushButton("Remove", this);

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

    QVBoxLayout *vlayout = new QVBoxLayout;
    vlayout->addWidget(treeView);
    vlayout->addLayout(hlayout);

    setLayout(vlayout);

    connect(createButton, SIGNAL(clicked()), this, SLOT(createDirectory()));
    connect(removeButton, SIGNAL(clicked()), this, SLOT(remove()));
}

DirectoryViewer::~DirectoryViewer()
{
}

void DirectoryViewer::createDirectory()
{
    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 DirectoryViewer::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 %1").arg(model->fileName(index)));
    }
}

main.cpp文件:

#include <QtGui/QApplication>
#include "directoryviewer.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    DirectoryViewer w;
    w.show();
    w.setWindowTitle("QFileSystemModel Demo");

    return a.exec();
}

运行界面:

QFileSystemModel的简单用法
原文链接: https://www.cnblogs.com/venow/archive/2012/10/18/2730063.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/66272

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午12:15
下一篇 2023年2月9日 下午12:15

相关推荐