文字左移

如果文字很多在屏幕中一次性绘制坑能造成卡屏,文字移动不流畅,所以要对文字分块进行移动。

移动方法:

1. 设置mDrawPos = width();即绘画起点在最右边。
 
2. 在计时器中设置mDrawPos -= mMoveSpeed,当 mDrawPos < -mTotalWidth时结束
 
3. 在paintEvent中根据mDrawPos计算出每一段实际文字的drawpos进行绘制
 
部分代码如下:
 
timerEvent中:
 if (mMoveDirection == pvprRssTextPlayInfo::RightToLeft)
 {    //由右往左移
    if (mTextOrientation == pvprRssTextPlayInfo::Normal)
        {
        mDrawPos -= mMoveSpeed;
        if(mDrawPos < -mTextTotalWidth)
        {
            finished = true;
        }
        }
} 

repaint(); 

 if (mPlayTimeType == pvprRssTextPlayInfo::PlayTime)
 {
    if (mStopPlayTime <= QDateTime::currentDateTime()) 
        {  
        mIsPlaying = false;
        OnPlayInfoFinished();
    }
}          

paintEvent中:

if (mMoveDirection == pvprRssTextPlayInfo::RightToLeft)
    {    //从右往左移
        if (mTextOrientation == pvprRssTextPlayInfo::Normal)
        {
            int drawPos = mDrawPos;
            foreach(pvprRssTextInfo rssTextInfo,mRssTextInfoList)
            {    
                if(drawPos < -rssTextInfo.textWidth || drawPos > width())        //对于屏幕之外的文字不绘制
                {
                    drawPos += rssTextInfo.textWidth;
                    continue;
                }
                painter.drawText(QRect(drawPos,0,rssTextInfo.textWidth,height()),mTextFlag,rssTextInfo.text);
                drawPos += rssTextInfo.textWidth;
            }
        }
    }

 

转载于:https://www.cnblogs.com/jck34/p/3844446.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值