有没有办法在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标志,除非在创建模型之前文件是可写的。
答案 0 :(得分:0)
setRootPath()也是解决这个问题的关键。您似乎必须调用它两次才能让它更新只读权限。当我改变我的选择代码来调用时,我偶然发现了这个:
m_pFileModel->setRootPath("");
m_pFileModel->setRootPath(path.c_str());
每次选择一个项目。然后,当我双击一个项目时,我看到图标更改为检出。虽然它没有立即让我重命名,我不得不再次双击它,但它确实有用。
我的过程:
连接到OnBeginEdit()信号并签出文件/更改权限
选择项目时:
m_pFileModel->setRootPath("");
m_pFileModel->setRootPath(path.c_str());
在OnBeginEdit()
中如果您在选择项目时未设置当前文件夹的路径,请执行以下TWICE
m_pFileModel->setRootPath("");
m_pFileModel->setRootPath(path.c_str());
请记住,您必须双击两次或按F2两次 - 一次结帐,第二次实际更改文件。