![](/img/trans.png)
[英]How to select a file in QTreeView for a QFileSystemModel by path?
[英]How to update file permissions in a QFileSystemModel
有沒有一種方法可以在QFileSystemModel(c ++)中更新文件的權限? 在允許用戶使用qtreeview重命名模型中列出的文件之前,請確保已從源代碼管理中檢出該文件。 此時文件不再是只讀的,但是模型仍然認為它是只讀的。 如何在不丟失樹的展開/折疊狀態的情況下強制模型更新文件的權限?
謝謝!
更新:檢出文件后,該文件已被標記為可寫。 模型仍然不知道更改。
QFile file(path.c_str());
QFileDevice::Permissions perms = file.permissions();
if (perms & QFile::WriteUser)
{
// Is already true
}
可以肯定的是,我繼續使用
file.setPermissions(file.permissions() | QFile::WriteUser);
不能更改模型中為該文件報告的權限。
更新:
int perms = fsModel->data(index, QFileSystemModel::Roles::FilePermissions).value<int>();
if (perms & QFile::WriteUser)
{
int i = 0;
}
注意:除非創建模型之前文件是可寫的,否則上述權限永遠不會設置QFile :: WriteUser標志。
setRootPath()也是解決此問題的關鍵。 似乎您必須調用它兩次才能獲取它以更新只讀權限。 當我將選擇代碼更改為call時,我偶然發現了這一點:
m_pFileModel->setRootPath("");
m_pFileModel->setRootPath(path.c_str());
每次選擇一個項目。 然后,當我雙擊一個項目時,我看到圖標已更改為檢出。 承認它並沒有立即讓我重命名,因此我不得不再次雙擊它,但是它確實起作用。
我的流程:
連接到OnBeginEdit()信號並簽出文件/更改權限
選擇一個項目時:
m_pFileModel->setRootPath("");
m_pFileModel->setRootPath(path.c_str());
內在OnBeginEdit()
如果在選擇項目時未將路徑設置為當前文件夾,請執行以下兩次
m_pFileModel->setRootPath("");
m_pFileModel->setRootPath(path.c_str());
請記住,您將不得不雙擊兩次或按F2兩次-一次簽出,第二次實際更改文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.