[英]How to select a file in QTreeView for a QFileSystemModel by path?
[英]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.