1

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 フラグが設定されていません。

4

1 に答える 1

0

setRootPath() は、これを解決するための鍵でもあります。読み取り専用権限を更新するには、2 回呼び出す必要があるようです。選択コードを呼び出すように変更したときに、これに出くわしました:

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

アイテムが選択されるたびに。次に、アイテムをダブルクリックすると、アイコンがチェックアウトに変わりました。確かに、すぐに名前を変更することはできませんでした。もう一度ダブルクリックする必要がありましたが、機能します。

私のプロセス:

OnBeginEdit() シグナルに接続し、ファイルをチェックアウトする / パーミッションを変更する

項目が選択されている場合:

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

OnBeginEdit() の内部

アイテムが選択されたときに現在のフォルダーへのパスを設定しなかった場合は、次の操作を 2 回実行します。

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

2 回ダブルクリックするか、F2 を 2 回押す必要があることに注意してください。1 回目はチェックアウトし、2 回目は実際にファイルを変更します。

于 2014-11-20T17:06:21.210 に答える