使用 QSortFilterProxyModel 按角色排序无法按 QDateTime 对模型进行排序

我遇到了一个简单的问题,但我不明白为什么我的模型没有排序。我有QAbstractListModel继承的SimpleModel类,我想按DateTime角色对其进行排序

抄送

这就是我在我的 Proxy 中设置代理的方式main.cpp

SimpleModel m;
ProxyModel proxyModel;
proxyModel.setSourceModel(&m);
proxyModel.setSortRole(SimpleModel::SimpleRoles::DateTimeRole);
engine.rootContext()->setContextProperty("simpleModel", &proxyModel);

我在SimpleModel中的项目是来自SimpleItem类的对象,它只有名称和日期时间。这是我的 SimpleModel 数据方法:

QVariant SimpleModel::data(const QModelIndex &index, int role) const
{
    if(!index.isValid()) {
        return QVariant();
    }

    auto simpleItem = static_cast<SimpleItem*>(index.internalPointer());
    if (!simpleItem) {
        return QVariant();
    }

    if(role == NameRole) {
        return simpleItem->name();
    }
    //This is used for displaying in QML
    else if(role == DateRole) {
        return simpleItem->dateTime().toString("yyyy-MM-dd");
    }
    // This is used for dsiplaying in QML too
    else if(role == TimeRole) {
        return simpleItem->dateTime().toString("hh:mm");
    }
    // This Role is only used for sorting
    else if(role == DateTimeRole) {
        return simpleItem->dateTime();
    }

    return QVariant();
}

在我QSortFilterProxyModel继承的ProxyModel 中我已经实现methood但它从未被调用:lessThan()

bool ProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
{
    qDebug() << "called lessThan()";
    QVariant leftData = sourceModel()->data(source_left);
    QVariant rightData = sourceModel()->data(source_right);

    if (leftData.userType() == QMetaType::QDateTime)
            return leftData.toDateTime() < rightData.toDateTime();

    return false;
}

我做错了什么,或者你有什么想法可以尝试吗?如果您需要更多代码,我会更新。提前致谢。

博客

正如你所说

它在调用 proxyModel.sort(0, Qt::DescendingOrder) 后工作;在 setSortRole 之后

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 QSortFilterProxyModel 按字母顺序对列表项进行排序?

如何使用QSortFilterProxyModel对浮点值进行排序?

如何使用QAbstractTableModel而不是QSortFilterProxyModel进行排序和过滤

使用QTableView中的QSortFilterProxyModel对两行进行排序

通过使用QSortFilterProxyModel对Qml ListView的数据进行排序。

QSortFilterProxyModel基于两个排序角色进行排序?

无法使用排序方法按升序对单词进行排序?

QSortFilterProxyModel在不需要时进行排序

如何基于组合框选择使用QSortFilterProxyModel对TreeView项进行排序

无法使用标签上的行为按标签对帖子进行排序

无法使用Groovy脚本按日期对文件进行排序

无法使用 ggplot 按降序对数据进行排序

快速排序无法按预期使用链表

Rails-使用订单对模型进行排序

使用jQuery按值对选项进行排序

使用JQuery按属性对DIV进行排序

PyQt5 QSortFilterProxyModel按适当的数据类型(int,float,datetime,string等)排序列

使用按长度排序的比较器对名称的ArrayList进行排序

使用qsort对结构进行排序(按“姓氏”字段排序)

使用排序参数按对象属性对列表进行排序

QSortFilterProxyModel按列值

如何按员工的角色的排序顺序对员工列表进行排序?

尝试按价格排序,但无法在WordPress中使用

无法使用Mobility在Rails中按翻译列排序

使用多个 query_string 时,Elasticsearch 无法按日期排序 [未找到 [[object Object]] 的映射以进行排序]

使用 Ext JS 当 rootVisible 为 false 时无法按字母顺序对子节点进行排序

我无法使用neDB数据库按字母顺序对数据进行排序

如何使用QDateTime :: fromString?

使用HasMany Relationship CakePHP 3按关联模型排序