私は標準のファイルエクスプローラーのように構築しています-左側のペインはフォルダーツリー用で、右側のペインは選択したフォルダー内のファイルを表示するためのものです。
QFileSystemModelを使用したQTreeViewは、フォルダーを表示するために使用されます。モデルのフィルターはQDir::Dirs | QDir::NoDotAndDotDot
、dirのみをリストし、ファイルをリストしないように設定されています。サブフォルダーのあるフォルダーに対してのみ拡張マークを表示したい。つまり、一部のディレクトリが空であるか、ファイルのみが含まれている場合は、拡張できないようにする必要があります。ただし、代わりに、ツリービューは空のディレクトリに対して拡張マークを保持します。そしてそれが問題です:それらを隠す方法は?
私はここで、グーグルで、QTの例で解決策を検索しました-成功しませんでした。質問は、私が思うに、答えるのはとても簡単です。現時点で私が得た唯一の解決策は、QAbstractItemModelをサブクラス化することです。それは苦痛です。
QT 4.8、QT Creator、C++。
示すコードは次のとおりです。
#include <QApplication>
#include <QFileSystemModel>
#include <QTreeView>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTreeView w;
QFileSystemModel m;
m.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
m.setRootPath("C:\\");
w.setModel(&m);
w.setRootIndex(m.index(m.rootPath()));
w.hideColumn(3);
w.hideColumn(2);
w.hideColumn(1);
w.show();
return a.exec();
}