1

次のフィルターを使用してQFileSystemModelを設定しています。

QDir::Filters( Dirs|AllDirs|Files|Drives|NoDotAndDotDot|AllEntries )  

私のプロキシモデルでは、正規表現を使用してファイルを名前でフィルタリングしています。

proxy_model_->setFilterRegExp(".*\\.(cpp$|cxx$|c$|hpp$|h$)");

....そして、mymodel_がQFileSystemModelである場合、次の行があります。

model_->setNameFilters(QStringList(proxy->filterRegExp().pattern()));

...まだ表示されているファイルはグレー表示されています。なぜ、そしてどのようにそれらを「正常」にするか。

4

2 に答える 2

1

実際、フォーマットは異なるQtクラス間で一貫していません。彼らが単一のQStringを取る場合、それは@HostileForkが言うようです。ただし、この場合、関数setNameFilters()はQStringListを取ります。これは、次のことを意味します。

fileModel->setNameFilters({"*.cpp", "*.cxx", "*.c", "*.hpp", "*.h"});

入力が間違った形式(ウィンドウのワイルドカードではなく正規表現)であったため、奇妙な構文に一致するものがなかったため、すべてが「これを除外」としてマークされました。

なぜグレー表示されるのですか?QFileSystemModelは、デフォルトで、ファイルを非表示にするのではなく、フィルター処理される(bwah?)無効化/グレー表示するためです。これは、次の呼び出しによって変更できます。

fileModel->setNameFilterDisables(false);

QFileSystemModelの「nameFilterDisables」プロパティ

于 2015-02-02T23:54:39.537 に答える
0

QFileSystemModelで使用される「名前フィルター」は、十分に文書化されていません。ただし、QFileDialogのsetNameFilterで使用されている形式とおそらく同じ形式であると想定します。

http://doc.qt.nokia.com/stable/qfiledialog.html#setNameFilter

もしそうなら、それらは正規表現ではありません。これらは奇妙な形式のテキストであり、その後にコマンドラインターミナルスタイルのワイルドカードを含む括弧が続きます。

だから私はこれがうまくいくと思います:

model_->setNameFilters(
    QStringList("Supported files (*.cpp *.cxx *.c *.hpp *.h)"));

一般に、ドキュメントまたは関数の名前で特に明記されていない限り、フィルターをQStringとして受け取る場所は、正規表現の作成方法を知っていると思います。

于 2011-12-10T16:15:56.937 に答える