繁体   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