如何更新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()也是解决这个问题的关键。似乎你必须调用它两次才能让它更新只读权限。当我把选择代码改为时,我偶然发现了这一点
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两次——一次用于签出,第二次用于实际更改文件。
相关文章:
- 如何使用Windows API C++更改已创建的文件夹/目录安全权限
- 从根权限进程创建可访问的文件
- 威纳派读取自定义文件或文件夹的所有访问权限
- 写入文件权限被拒绝
- C++将文件权限添加到 zip 文件
- 如何在Qt/C++中设置Windows文件权限
- 更改 Linux 套接字文件权限
- C++如何通过win32api检索文件权限和所有权
- 如何限制程序的文件权限
- 在不作为超级用户的情况下更改文件权限
- 程序删除其他用户的文件 - 权限被拒绝
- 如何创建自定义操作以更改文件权限
- 如何更新QFileSystemModel中的文件权限
- 如何使用c++boost库获取文件权限
- 正在检查非提升用户在Windows上的文件权限
- 文件权限中的"l"位 ( ---x--l--- )O/P
- 如何使用Boost库更改文件权限
- 检查windows文件权限
- ofstream (c++)不创建文件(权限被拒绝)
- 如何在C++中打开文件时设置文件权限