簡體   English   中英

QFileSystemModel-名稱過濾器和readOnly

[英]QFileSystemModel - Name filters and readOnly

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

預先感謝。

我相信一個快速的解決方法可能是派生您自己的項目模型,該模型僅允許編輯文件,而不允許編輯目錄:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM