gpt4 book ai didi

c++ - 如何更新 QFileSystemModel 中的文件权限

转载 作者:太空宇宙 更新时间:2023-11-04 13:43:33 24 4
gpt4 key购买 nike

有没有办法在 QFileSystemModel (c++) 中更新文件的权限?在允许用户使用 qtreeview 重命名模型中列出的文件之前,我确保该文件已从源代码管理中 checkout 。此时文件不再是只读的,但模型仍然认为它是只读的。如何在不丢失树的展开/折叠状态的情况下强制模型更新文件的权限?

谢谢!

更新: checkout 文件后,该文件已被标记为可写。尽管如此,模型仍然没有意识到这一变化。

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());

每次选择一个项目。然后,当我双击一个项目时,我看到图标变为已 checkout 。当然它没有立即让我重命名它,我不得不再次双击它,但它确实有效。

我的过程:

连接到 OnBeginEdit() 信号并 check out 文件/更改权限

当一个项目被选中时:

m_pFileModel->setRootPath("");
m_pFileModel->setRootPath(path.c_str());

内部 OnBeginEdit()

如果您在选择项目时没有设置当前文件夹的路径,请执行以下两次

m_pFileModel->setRootPath("");
m_pFileModel->setRootPath(path.c_str());

请记住,您必须双击两次或按两次 F2 - 一次 check out ,第二次实际更改文件。

关于c++ - 如何更新 QFileSystemModel 中的文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26849305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com