• 4237阅读
  • 2回复

[提问]跑马灯文字闪烁,及字体改变的问题。 [复制链接]

上一主题 下一主题
离线shanghai
 
只看楼主 倒序阅读 楼主  发表于: 2012-04-07
#include <QtGui>

#include "ticker.h"

Ticker::Ticker(QWidget *parent)
    : QWidget(parent)
{
    offset = 0;
    myTimerId = 0;

}

void Ticker::setText(const QString &newText)
{
    myText = newText;
    update();
    updateGeometry();
}

QSize Ticker::sizeHint() const
{
    return fontMetrics().size(0, text());
}

void Ticker::paintEvent(QPaintEvent * /* event */)
{
    QPainter painter(this);

   // QFont font("Courier" , 24);
  //  painter.setFont(font);
    int textWidth = fontMetrics().width(text());

    int textHeight =fontMetrics().height();
    if (textHeight < 1)
        return;
    int x = -offset;
   // while (x < width()) {
    while(x<height()){
       // painter.drawText(x, 0, textWidth, height(),
      //                   Qt::AlignLeft | Qt::AlignVCenter, text());
        painter.drawText(0,x,width(),height(),Qt::AlignLeft|Qt::AlignVCenter,text());
       // x += textWidth;
        x+=textHeight;
    }
}

void Ticker::showEvent(QShowEvent * /* event */)
{
    myTimerId = startTimer(10);
}

void Ticker::timerEvent(QTimerEvent *event)
{
    if (event->timerId() == myTimerId) {
        offset++;
        if(offset>=fontMetrics().height())
            offset=0;
      //  if (offset >= fontMetrics().width(text()))
       //     offset = 0;
       // scroll(-1, 0);
        scroll(0,-1);
    } else {
        QWidget::timerEvent(event);
    }
}

void Ticker::hideEvent(QHideEvent * /* event */)
{
    killTimer(myTimerId);
    myTimerId = 0;
}

参考论坛的例子修改的上下滚动效果,但是发现字会闪烁,另外我设定字体后,绘制的字上下会叠在一块,那位大哥,帮忙看一下咋回事。
离线roywillow

只看该作者 1楼 发表于: 2012-04-07
回 楼主(shanghai) 的帖子
我只能说,自己先理解了这段代码吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线shanghai
只看该作者 2楼 发表于: 2012-04-08
菜鸟,qt刚接触不久,不熟.那位大哥帮忙看看,或者说一下实现的思路.
快速回复
限100 字节
 
上一个 下一个