ツリービューでカスタム サブクラス QFileSystemModel を使用して、ユーザーがチェックボックスを使用してフォルダーを選択できるようにしています。私の問題は、マップされたネットワーク ドライブがハード ドライブとして表示されることですが、それらを操作できないため、ローカル ドライブのみを表示したいと考えています。QFileSystemModel に強制的にローカル ドライブのみを表示させるにはどうすればよいですか?
2 に答える
ソースとドキュメントから把握できたことから、QFileSystemModel を直接使用することは不可能です。
私が考えることができる唯一の可能な回避策は、再定義されたfilterAcceptsRow()またはfilterAcceptsColumn()またはその両方でQSortFilterProxyModelサブクラスを使用することです.QFileSystemModelを使用したことがなく、列と見なされるものがわからないため、どちらかわかりません。何行。再定義されたメソッドは、QFileSystemModel::FilePathRole で data() を使用するか、qobject_cast<> を使用して QFileSystemModel::filePath() を呼び出すことにより、ファイルのパスを特定します。次に、どうにかしてドライブのルート パスを把握し、GetDriveType() WinAPI 関数を呼び出します。これは、Qt が明らかにドライブがネットワークかどうかを判断する方法を提供していないためです。もちろん、これは下に置く必要があり#ifdef Q_OS_WIN32
ます。
これは複雑に見えますが、他に方法が思いつきません。また、GetDriveType() がどれほど速いかはわかりませんが、パフォーマンスに問題がある場合は、何らかのキャッシュを実装することが常に可能です。
QFileSystemModel フィルタを QDir::Drives のみに使用するのはどうですか。私の知る限り、これはローカル ハード ドライブのみを一覧表示します。