欢迎访问Ningto's博客

Menu
  • 首页
  • 归档
  • 关于
  • 书签
  • 必应壁纸
  • IT聚合
  • 工具
    • 我的工具列表
    • 我的网盘
    • 必应每日壁纸API
    • Html转Markdown
    • 仙尘光标
Menu

QSortFilterProxyModel排序不正确

最后更新 2019-03-27 00:34:50   阅读量 2116

QSortFilterProxyModel排序不正确

客户端遇到的问题是当频繁的更新model时发现table上的行排序不正确,默认使用的是setDynamicSortFilter为true的方式。

在排除排序逻辑没有问题的情况下,能想到的方法是在model changed之后手动调用一下sort方法再重新排一下,但是这里遇到了一个问题,如果仅仅是调用sort发现没什么效果,在sort之前调用invalidate是可行的。然而当删除table行的时候触发上面的操作在delegate中的paint函数调用index.model()会造成崩溃,可能跟这个index被删除了有关系。

后来看文档发现其实可以关掉dynamicSortFilter,全部由我们自己来触发排序,但是又不能触发的太频繁所以下面用一个Timer来控制排序。

调用下面函数来控制触发排序的间隔时间

void ProxyModel::applyColumnOrder()
{
    //invalidate();
    sort(sortColumn());
}

void ProxyModel::autoSortInterval(int millisecond)
{
    // 不使用动态排序,自动调用函数来进行排序
    setDynamicSortFilter(millisecond > 0 ? false : true);
    if (!sortTimer_) {
        sortTimer_ = new QTimer(this);
        sortTimer_->setSingleShot(true);
        connect(sortTimer_, &QTimer::timeout, this, &ProxyModel::applyColumnOrder, Qt::QueuedConnection);
    }
    sortTimer_->setInterval(millisecond);
}

在model changed的槽函数里面启动timer

void ProxyModel::onModelChanged()
{
    if (sortTimer_ && sortTimer_->interval() > 0 && dynamicSortFilter() == false) {
        sortTimer_->start();
    }
}
(转载本站文章请注明作者和出处:泞途 - ningto.com)

下一篇 – MAC WIFI连上了但是不能上网
上一篇 – JavaScript 栈、队列

  1. Windows
  2. C/C++
  3. Qt

toningto@outlook.com

标签云

Design Shell Web Windows Qt Database React Bug Node.js Android Mac Go ChatGPT Java Others Tips Javascript IOS Python MQ Linux C/C++ Tools Mobile Boost Life MongoDB Product

推广链接

【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年99元

多谢支持,用了好几年,服务很稳定支持多设备!

其他

文章RSS

Copyright © 2016 Welcome To Ningto Blog | 鄂ICP备17003086号-2