QFileSystemModel - 名称过滤器和readOnly

时间:2016-01-09 00:09:15

标签: c++ qt

我已经对QFileSystemModel提出了一些问题,我无法弄清楚为什么当我选择通过扩展程序隐藏某些文件时,其他人仍然会显示但是具有隐藏的文件样式和我想只setReadOnly(false)个文件以避免重命名文件夹。

这是一个例子:

QVBoxLayout *dockLayout = new QVBoxLayout;
QFileSystemModel *dockModel = new QFileSystemModel;
dockModel->setRootPath("C:/path");
dockModel->setNameFilters(QStringList()<<"*.typ"); //It does show all other types but they are like hidden and unchangeable
dockModel->setReadOnly(false); //I want to setReadOnly(false) for file and (true) for folders.
QTreeView *view = new QTreeView;
view->setModel(dockModele);
view->setRootIndex(dockModele->index("C:/path"));
view->hideColumn(1);
view->hideColumn(2);
view->hideColumn(3);
dockLayout->addWidget(view);

提前感谢。

1 个答案:

答案 0 :(得分:0)

我认为快速修复可能是派生自己的项目模型,只允许编辑文件,而不是目录:

class MyFileSystemModel : public QFileSystemModel
{
    typedef QFileSystemModel super;
protected:
    virtual Qt::ItemFlags flags(const QModelIndex & index) const override
    {
        // Retreive initial flags from QFileSystemModel's implementation
        Qt::ItemFlags flags = super::flags(index);

        // Retain all flags except for the Editable flag
        flags &= ~Qt::ItemIsEditable;

        // Enable editing for all file types except directories
        if(!isDir(index))
            flags |= Qt::ItemIsEditable;

        return flags;
    }
};