Qt/C++ 跑马灯效果~

来源:互联网 发布:js url base64编码 编辑:程序博客网 时间:2024/06/07 22:36

话不多说直接上源码

.h文件

class TextMovingWidget : public QWidget{    Q_OBJECTpublic:    TextMovingWidget(const QString str="" ,QWidget *parent = 0);    ~TextMovingWidget();    void setText(const QString&);protected:    virtual void paintEvent(QPaintEvent*);    inline int getDirection(const QString&);private slots:    void slot_UpdateTextGeometry();private:    QTimer *_timer;    QString _text;    int m_direction; //zero means left ,one means right;    int m_x;};

.cpp

TextMovingWidget::TextMovingWidget(const QString str ,QWidget *parent)    : QWidget(parent),_text(str),m_direction(1),m_x(0){    _timer=new QTimer(this);    connect(_timer,SIGNAL(timeout()),this,SLOT(slot_UpdateTextGeometry()));    _timer->start(30);}TextMovingWidget::~TextMovingWidget(){}void TextMovingWidget::setText(const QString &t){    _text=t;    m_x=0;    update();}void TextMovingWidget::paintEvent(QPaintEvent *e){    QWidget::paintEvent(e);    QPainter p(this);    p.setPen(Qt::white);    QFontMetrics metric(font());    int y=(height()- metric.height())/2;    p.drawText(m_x,y,metric.width(_text),metric.height(),Qt::AlignLeft,_text);}inline int TextMovingWidget::getDirection(const QString &text){    QFontMetrics metrics(font());    int tw=metrics.width(text);    if(tw<=width())    {        if(m_x+tw>width())            return 0;        else if(m_x<=0)        return 1;         return m_direction;    }    else    {        if(m_x==10)          return 0;        else if(m_x<=width()-tw-10)        return 1;         return m_direction;    }}void TextMovingWidget::slot_UpdateTextGeometry(){    QFontMetrics metric(font());    int tw= metric.width(_text);    if(tw>width()) //If the text width greater than widget width    {        if(m_direction) //right            m_x++;        else          //left            m_x--;    }    else    {        if(m_direction) //right            m_x++;        else          //left            m_x--;    }    m_direction=getDirection(_text);    update();}

效果就是试试便知~

更多文章:http://blog.csdn.net/what951006
powered by:小乌龟在大乌龟背上

0 0
原创粉丝点击