首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QFileSystemModel排序DirsFirst

QFileSystemModel排序DirsFirst
EN

Stack Overflow用户
提问于 2012-05-29 02:59:19
回答 2查看 3.3K关注 0票数 2

在QDirModel中如何使用QDir::DirsFirst对QFileSystemModel进行排序?QFileSystemModel没有setSorting方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-29 04:54:52

据我所知,您不能(在Qt4中)。

默认的排序顺序(按"name“列),或按大小排序的行为类似于QDir::DirsFirst (如果按相反的顺序排序,则为DirsLast ),但按时间或类型排序并不会将目录与普通文件区别对待。

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-12-21 13:04:49

也许会有人需要这个。正如Kuba Ober在评论中提到的那样,我首先使用QFileSystemModel的QSortFilterProxyModel实现了目录排序。可能还不完美,但仍然是正确的方向。

代码语言:javascript
复制
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);
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10789284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档