QDirModel のように QDir::DirsFirst で QFileSystemModel をソートするにはどうすればよいですか? QFileSystemModel にはメソッドがありませんsetSorting
。
3445 次
2 に答える
6
多分誰かがこれを必要とするでしょう。Kuba Ober がコメントで言及しているように、QFileSystemModel の QSortFilterProxyModel を使用してディレクトリの最初の並べ替えを実装しました。まだ完璧ではないかもしれませんが、それでも正しい方向性です。
bool MySortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
{
// If sorting by file names column
if (sortColumn() == 0) {
QFileSystemModel *fsm = qobject_cast<QFileSystemModel*>(sourceModel());
bool asc = sortOrder() == Qt::AscendingOrder ? true : false;
QFileInfo leftFileInfo = fsm->fileInfo(left);
QFileInfo rightFileInfo = fsm->fileInfo(right);
// If DotAndDot move in the beginning
if (sourceModel()->data(left).toString() == "..")
return asc;
if (sourceModel()->data(right).toString() == "..")
return !asc;
// Move dirs upper
if (!leftFileInfo.isDir() && rightFileInfo.isDir()) {
return !asc;
}
if (leftFileInfo.isDir() && !rightFileInfo.isDir()) {
return asc;
}
}
return QSortFilterProxyModel::lessThan(left, right);
}
于 2013-12-21T05:04:48.860 に答える
2
私が知る限り、(Qt4 では) できません。
デフォルトの並べ替え順序 (「名前」列による)、またはサイズによる並べ替えはQDir::DirsFirst
(またはDirsLast
の逆順の場合) のように動作しますが、時間または種類による並べ替えでは、ディレクトリは通常のファイルと同じように扱われます。
は並べ替え順序を変更するためのAPI を公開していません。また、コードQFileSystemModel
でそれに影響を与える機会も見当たりません。QFileSystemModel
(現在の Qt5 ドキュメントには、これが変更されたことを示すものは何もありませんが、最終的なものではなく、詳しく調べていません。)
于 2012-05-28T20:54:51.997 に答える