2

QDirModel のように QDir::DirsFirst で QFileSystemModel をソートするにはどうすればよいですか? QFileSystemModel にはメソッドがありませんsetSorting

4

2 に答える 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 に答える