2

您如何使用 QDir::DirsFirst 对 QFileSystemModel 进行排序,就像在 QDirModel 中一样?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如果按相反顺序排序),但按时间或类型排序不会将目录与普通文件区别对待。

QFileSystemModel没有公开用于更改排序顺序的 API,而且我看不到在代码中影响它的任何机会QFileSystemModel

(我在当前的 Qt5 文档中没有看到任何表明这已经改变的东西,但这些不是最终的,我没有仔细查看。)

于 2012-05-28T20:54:51.997 回答