【Qt】之 QTreeView和QFileSystemModel


用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
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将QFileSystemModel保存为XML,可以按照以下步骤操作: 1. 在Qt Creator中创建一个新的Qt Widgets应用程序项目。 2. 在项目中添加一个QTreeView控件和一个QFileSystemModel模型。 3. 在QTreeView控件中设置模型为QFileSystemModel模型。 4. 点击“文件”菜单并选择“新建文件”选项。在弹出的对话框中,选择“Qt”类别并选择“XML文件”类型。命名文件并点击“下一步”。 5. 在“XML文件设置”对话框中,选择“生成DOM模型”选项并点击“下一步”。 6. 在“XML文件内容”对话框中,将以下代码添加到XML文件中: ``` <?xml version="1.0" encoding="UTF-8"?> <FileSystemModel> </FileSystemModel> ``` 7. 在Qt Creator中打开mainwindow.cpp文件并添加以下代码: ``` #include <QXmlStreamWriter> #include <QFile> void MainWindow::on_saveButton_clicked() { QFile file("fileSystemModel.xml"); file.open(QIODevice::WriteOnly); QXmlStreamWriter xmlWriter(&file); xmlWriter.setAutoFormatting(true); xmlWriter.writeStartDocument(); xmlWriter.writeStartElement("FileSystemModel"); for (int i = 0; i < model->rowCount(); ++i) { QModelIndex index = model->index(i, 0); QString fileName = model->data(index, Qt::DisplayRole).toString(); xmlWriter.writeStartElement("File"); xmlWriter.writeTextElement("Name", fileName); xmlWriter.writeEndElement(); } xmlWriter.writeEndElement(); xmlWriter.writeEndDocument(); file.close(); } ``` 8. 在mainwindow.h文件中添加以下代码: ``` private slots: void on_saveButton_clicked(); private: QFileSystemModel *model; ``` 9. 在mainwindow.cpp文件中的构造函数中添加以下代码: ``` model = new QFileSystemModel(this); model->setRootPath("/"); ui->treeView->setModel(model); ``` 10. 在Qt Creator中编译并运行程序。单击保存按钮将QFileSystemModel保存为XML文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值