2

ツリービューでカスタム サブクラス QFileSystemModel を使用して、ユーザーがチェックボックスを使用してフォルダーを選択できるようにしています。私の問題は、マップされたネットワーク ドライブがハード ドライブとして表示されることですが、それらを操作できないため、ローカル ドライブのみを表示したいと考えています。QFileSystemModel に強制的にローカル ドライブのみを表示させるにはどうすればよいですか?

4

2 に答える 2

2

ソースとドキュメントから把握できたことから、QFileSystemModel を直接使用することは不可能です。

私が考えることができる唯一の可能な回避策は、再定義されたfilterAcceptsRow()またはfilterAcceptsColumn()またはその両方でQSortFilterProxyModelサブクラスを使用することです.QFileSystemModelを使用したことがなく、列と見なされるものがわからないため、どちらかわかりません。何行。再定義されたメソッドは、QFileSystemModel::FilePathRole で data() を使用するか、qobject_cast<> を使用して QFileSystemModel::filePath() を呼び出すことにより、ファイルのパスを特定します。次に、どうにかしてドライブのルート パスを把握し、GetDriveType() WinAPI 関数を呼び出します。これは、Qt が明らかにドライブがネットワークかどうかを判断する方法を提供していないためです。もちろん、これは下に置く必要があり#ifdef Q_OS_WIN32ます。

これは複雑に見えますが、他に方法が思いつきません。また、GetDriveType() がどれほど速いかはわかりませんが、パフォーマンスに問題がある場合は、何らかのキャッシュを実装することが常に可能です。

于 2010-12-18T13:51:07.437 に答える
0

QFileSystemModel フィルタを QDir::Drives のみに使用するのはどうですか。私の知る限り、これはローカル ハード ドライブのみを一覧表示します。

于 2011-01-13T04:42:54.287 に答える