Qt实现滚动字幕效果

转载 2016年04月11日 11:01:32

http://blog.sina.com.cn/s/blog_75deeddd0100tu2n.html

文字滚动效果
.h文件
#ifndef ROLLCAPTION_H
#define ROLLCAPTION_H
#include <QWidget>
class RollCaption : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(QString text READ text WRITE setText)
public:
    explicit RollCaption(QWidget *parent = 0);
    void setText(const QString &newText);
    QString text() const
    {
        return myText;
    }
    QSize sizeHint() const;
    void setSpeed(const int timer = 50);
    void setcolor(QColor);
protected:
    void paintEvent(QPaintEvent *event);
    void timerEvent(QTimerEvent *event);
    void showEvent(QShowEvent *event);
    void hideEvent(QHideEvent *event);
private:
    QString myText;
    int offset;
    int myTimerId;
    int myTimer;
    QPalette palette;
};
#endif // ROLLCAPTION_H


.cpp文件
#include "rollcaption.h"

#include <QPainter>
#include <qcoreevent.h>
RollCaption::RollCaption(QWidget *parent) :
    QWidget(parent)
{
    this->offset = 0;
    this->myTimerId = 0;
    this->myTimer = 50;
}
void RollCaption::setText(const QString &newText)
{
    this->myText = newText;
    this->update();
    this->updateGeometry();
}
QSize RollCaption::sizeHint() const
{
    return this->fontMetrics().size(0,text());
}
void RollCaption::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QFont wordFont = this->font();
    wordFont.setBold(false);
    wordFont.setPixelSize(24);
    wordFont.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221"));
    this->setFont(wordFont);
    int textWidth = fontMetrics().width(this->text());
    if(textWidth < 1)
    {
        return;
    }
    int x= -this->offset;
    while(x < width())
    {
        painter.drawText(x,0,textWidth,height(),
                         Qt::AlignLeft  | Qt::AlignVCenter,text());
        x += textWidth;
    }
}
void RollCaption::showEvent(QShowEvent *)
{
    this->myTimerId = startTimer(this->myTimer);
}
void RollCaption::timerEvent(QTimerEvent *event)
{
    if (event->timerId() == this->myTimerId)
    {
        ++this->offset;
        if (this->offset >= this->fontMetrics().width(this->text())) {
            this->offset = 0;
        }
        this->scroll(-1, 0);
    }else
    {
        QWidget::timerEvent(event);
    }
}
void RollCaption::hideEvent(QHideEvent * )
{
    killTimer(myTimerId);
    this->myTimerId = 0;
}
void RollCaption::setSpeed(int timer)
{
    this->myTimer = timer;
}
void RollCaption::setcolor(QColor color)
{
    palette.setColor(QPalette::WindowText,color);
    setPalette(palette);
}

相关文章推荐

Qt(QLabel)实现滚动字幕

滚动字幕,也叫跑马,就是动态显示一行字符。前面实现是使用QTimer控制,直接在槽函数中截取字符串进行显示,只控制字符串在控件的一端显示,超出控件的部分并没有从控件的另一端循环显示出来。于是我重新实现...

QT 实现字幕滚动(上下滚动)

// 我们假设有一个QLabel 用来显示某某信息,但是信息有时候过长,高度超过了QLabel的高度 // 这时候最好的方法是让其滚动,那么我们就来实现以下上下滚动。 // 要用到的QT 事件  ...

Qt之滚动字幕

简述滚动字幕,也就是传说中的跑马灯效果。​简单地理解就是:每隔一段时间(一般几百毫秒效果较佳)显示的文字进行变化(即滚动效果)。简述 实现 效果 源码实现利用定时器QTimer,在固定的时间(这里为2...

QT里滚动字幕如何做

QT里滚动字幕怎么做? 请问,QT里滚动字幕怎么做?就是从一个文本文件中读出字符串,然后显示出来,不过要不停的滚动显示。 ------解决方案-------------------- 重新实...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

【Qt】滚动条QScroolBar实现滚屏功能

环境:Qt5.3 编译器:Qt Creator 功能:Qt滚屏功能

怎么让文字从左右滚动显示或者从右到左滚动显示

1、从左到右滚动显示                   ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

QT GUI总结

QT提供了设计师工具,可以很方便的使用鼠标拖拽的方式绘制界面。绘制完毕后自动生成一个界面的.h文件(如ui_mainwindow.h),其中含有一个自动生成的Ui_MainWindow类,这个类中核心...
  • henreash
  • henreash
  • 2011年11月03日 17:08
  • 19933
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt实现滚动字幕效果
举报原因:
原因补充:

(最多只允许输入30个字)