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

原文地址: https://www.ningto.com/post/5aaf8c5d43bef42108349a5c

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

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

解决方法

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

  1. 先定义一个Timer
    timer_ = new QTimer(this);
    timer_->setSingleShot(true);
    connect(timer_, SIGNAL(timeout()), this, SLOT(onOnceTimer()));
  1. 当有输入时Timer先停止然后重新开始
void Test::onTextEdited(const QString &text)
{
	timer_->stop();
	timer_->start(200);
}
  1. 做搜索的动作
void Test::onOnceTimer()
{
    QString textTrimmed = text().trimmed();
    // start search ...
}

优化

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

	if (timer_->isActive()) {
		timer_->stop();
		timer_->start(200);
	} else {
		timer_->start(0);
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值