簡體   English   中英

如何在QFileSystemModel中更新文件權限

[英]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.

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