欢迎访问Ningto's博客

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

bug修复,解决延迟搜索的问题

最后更新 2018-03-19 10:09:33   阅读量 2487

Table of Contents

  • 1. 解决方法
  • 2. 优化

在输入框进行搜索的时候,通常我们每输入一个文字都要进行一次搜索,这样能得到实时的搜索结果。如果搜索速度很快的话当然是没问题的。

如果搜索的速度慢,当用户快速输入的时候就会很卡了。
其实在用户快速输入的时候对中间搜索的结果并不感兴趣,最后的结果才是我们想要的,所以中间过程的频繁搜索中是有些浪费时间。

解决方法

我们可以设置一个输入的间隔时间,假如是200毫秒。从第一次输入开始计时,如果200毫秒后用户没有继续输入(说明这就是他想要搜索的关键词)才进行搜索,如果200毫秒内有输入我们就重新计时。这个可以过滤掉很多中间词的搜索。

  1. 先定义一个Timer

    timer_ = new QTimer(this);
    timer_->setSingleShot(true);
    connect(timer_, SIGNAL(timeout()), this, SLOT(onOnceTimer()));
    
  2. 当有输入时Timer先停止然后重新开始

    void Test::onTextEdited(const QString &text)
    {
    timer_->stop();
    timer_->start(200);
    }
    
  3. 做搜索的动作

    void Test::onOnceTimer()
    {
    QString textTrimmed = text().trimmed();
    // start search ...
    }
    

优化

如果用户输入的非常非常快在200毫秒之内,此时搜索结果还没有出来他就进行了下一步操作。根据不同场景这样会带来一些问题,优化一下Timer触发逻辑。

    if (timer_->isActive()) {
        timer_->stop();
        timer_->start(200);
    } else {
        timer_->start(0);
    }
(转载本站文章请注明作者和出处:泞途 - ningto.com)

下一篇 – bug修复,内存释放问题
上一篇 – CentOs7 防火墙firewalld基本使用方法

  1. C/C++
  2. 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