【Qt】之 QTreeView和QFileSystemModel

来源:互联网 发布:数据库开发和软件开发 编辑:程序博客网 时间:2024/05/23 11:54


用Qt来显示一个文件目录是很简单的,如下:


例子1:查找显示所有的图片


QFileSystemModel *model = new QFileSystemModel();    model->setRootPath("/");    //model->setFilter(QDir::Dirs|QDir::NoDotAndDotDot);        //只显示文件夹    // 设置过滤器    QStringList filter;    filter << "*.png" << "*.jpg" << "*.bmp" << "*.gif";    model->setNameFilters(filter);    // 没有通过过滤器的文件disable还是隐藏,true为disable false为隐藏    model->setNameFilterDisables(false);    mTreeView = new QTreeView();    mTreeView->setAnimated(false);    mTreeView->setSortingEnabled(true);    mTreeView->setModel(model);


1.QDirModel已经不建议使用了,应使用QFileSystemModel

2.设置一些特殊属性的过滤 setFilter 如只显示文件夹或系统文件

3.显示项的名字过滤器这个非常有用,如我们想显示所有的"png,jpg,bmp,gif"图片

4.setNameFilterDisables这个效果如下图:

setNameFilterDisables(false)表示不符合名字过滤要求的隐藏而不是disable




例子2:创建一个简单的可以添加文件夹删除文件夹的资源管理



实现也很简单:

    model = new QFileSystemModel();    model->setRootPath(QDir::currentPath());    mTreeView = new QTreeView();    mTreeView->setAnimated(false);    mTreeView->setSortingEnabled(true);    mTreeView->setModel(model);    mTreeView->setRootIndex(model->index(QDir::currentPath()));    QPushButton* mkdirButton = new QPushButton(tr("Make directory"), this);    QPushButton* rmButton = new QPushButton(tr("Remove"), this);    QHBoxLayout* buttonLayout = new QHBoxLayout;    buttonLayout->addWidget(mkdirButton);    buttonLayout->addWidget(rmButton);    QVBoxLayout* layout = new QVBoxLayout();    layout->addWidget(mTreeView);    layout->addLayout(buttonLayout);    setLayout(layout);    setWindowTitle("File system...");    resize(960,640);    //connect(mTreeView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_treeView_doubleClicked(QModelIndex)));    connect(mkdirButton, SIGNAL(clicked()), this, SLOT(mkdir()));    connect(rmButton, SIGNAL(clicked()), this, SLOT(rm()));

添加目录:

void Dialog::mkdir(){    QModelIndex index = mTreeView->currentIndex();    if ( !index.isValid() ) {        return;    }    QString name = QInputDialog::getText(this, tr("Create directory"), tr("Directory name"));    if ( !name.isEmpty() ) {        if ( !model->isDir(index) ) {            index = model->parent(index);        }        if ( !model->mkdir(index, name).isValid() ) {            QMessageBox::information(this, tr("Create directory failed..."), tr("Failed to create directory"));        }    }}

删除目录和文件

void Dialog::rm(){    QModelIndex index = mTreeView->currentIndex();    if ( !index.isValid() ) {        return;    }    bool ok;    QFileInfo info = model->fileInfo(index);    if ( info.isDir() ) {        ok = model->rmdir(index);    } else {        ok = model->remove(index);    }    if ( !ok ) {        QMessageBox::information(this, tr("Removed"), tr("Filed to remove %1").arg(model->fileName(index)));    }}


工程如下:



2 0
原创粉丝点击