QT学习(六)----360界面实现(修改)

上次的360界面经过测试发现了一个bug,就是在窗口滚动的过程中再次点击按钮的话,页面会一直滚动到底层页面。

经过debug发现,在一个页面滚动没有结束的过程中再次点击会在以下代码处无限循环:

while(currentXpos < destXpos)
{
	m_pLabelFg->move(currentXpos+WINDOW_PAGE_MOVE, WINDOW_START_Y);
	currentXpos = m_pLabelFg->x();
	qApp->processEvents(QEventLoop::AllEvents);//通过事件延时实现滚动效果
}
        m_pLabelFg->move(destXpos, WINDOW_START_Y);
以上代码本是通过 qApp->processEvents(QEventLoop::AllEvents);进行延时实现滚动效果,但是这样做会在滚动的过程中继续监听其他事件,这样在滚动过程中再次点击会继续处理点击的事件,从而无限循环。

经过调试,已经更改掉了bug,以下是实现代码:

time1->start(10);//左移timer
time2->start(10);//右移timer
void DataBrain::onTimerOut1()
{
	if(WINDOW_PAGE_MOVE >=(currentXpos-destXpos))
	{
		m_pLabelFg->move(destXpos, WINDOW_START_Y);//确保最后移到指定的位置
		time1->stop();
	}
	m_pLabelFg->move(currentXpos-WINDOW_PAGE_MOVE, WINDOW_START_Y);
	currentXpos = m_pLabelFg->x();
	m_thislabel->move(thisMoveX+WINDOW_PAGE_MOVE/4,122);
	thisMoveX=m_thislabel->x();
}
void DataBrain::onTimerOut2()
{
	if( WINDOW_PAGE_MOVE >=(destXpos-currentXpos))
	{
		m_pLabelFg->move(destXpos, WINDOW_START_Y);
		time2->stop();
	}
	m_pLabelFg->move(currentXpos+WINDOW_PAGE_MOVE, WINDOW_START_Y);
	currentXpos = m_pLabelFg->x();
	m_thislabel->move(thisMoveX-WINDOW_PAGE_MOVE/4,122);
	thisMoveX=m_thislabel->x();
}
这样用timer事件来替代 qApp->processEvents(QEventLoop::AllEvents);的延时效果,这样就不会出现以上的bug了。

而且经测试,上一个版本在连续点击中间两个label时,会将每一次的位移都移动完才停下,就会造成点击结束还会不断的滚动。改过之后的代码也取消掉了这个bug,在timer的延时过程中再次触发事件,系统会将时间片分配给新的事件而结束掉原来的事件。

改后的源代码在http://download.csdn.net/detail/zhangyang1990828/5258719地址中。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春阳CYang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值