2014-11-10 13 views
1

QFileSystemModel (C++)에서 파일 사용 권한을 업데이트하는 방법이 있습니까? 사용자가 qtreeview를 사용하여 모델에 나열된 파일의 이름을 바꿀 수있게하기 전에 파일이 소스 제어에서 체크 아웃되었는지 확인합니다. 이 시점에서 파일은 더 이상 읽기 전용이 아니지만 모델은 여전히 ​​읽기 전용이라고 생각합니다. 트리의 확장/축소 상태를 잃지 않고 파일의 사용 권한을 업데이트하도록 모델을 강제 설정하려면 어떻게해야합니까?QFileSystemModel에서 파일 사용 권한을 업데이트하는 방법

감사합니다.

업데이트 : 파일을 체크 아웃 한 후에 파일에 이미 쓰기 가능으로 플래그가 지정되어 있습니다. 그러나 모델은 변경 사항을 알지 못합니다.

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

그럴 경우 "QFileSystemModel refresh"라고 말하면서 ... –

+0

가능한 복제본 [다른 프로세스를 통해 파일이 변경된 후 QTreeView에서 QFileSystemModel을 새로 고치는 방법은 무엇입니까?] (http://stackoverflow.com/questions/) 22083933/how-to-refresh-a-qfilesystem-in-a-qtreeview-after-files-through-anot) –

+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를 두 번 눌러야합니다. 체크 아웃하려면 한 번, 파일을 실제로 변경하려면 두 번째를 눌러야합니다.