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之滚动字幕

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

Qt(QLabel)实现滚动字幕

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

QT滚动字幕代码(包括中英文截取)

本 #include #include "Ticker.h" #include #include #include #define SPEED 200 //滚动速度,单位为毫秒 ...
  • xingyuboa
  • xingyuboa
  • 2014年04月18日 09:51
  • 545

QT里滚动字幕如何做

QT里滚动字幕怎么做? 请问,QT里滚动字幕怎么做?就是从一个文本文件中读出字符串,然后显示出来,不过要不停的滚动显示。 ------解决方案-------------------- 重新实...
  • king16304
  • king16304
  • 2016年09月17日 13:51
  • 626

Qt QLabel滚动字幕.zip

  • 2016年04月21日 18:03
  • 7KB
  • 下载

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

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

QT---字幕滚动效果,检测鼠标进入和离开控制字幕滚动

鼠标的进入和离开的检测 滚动字幕实现1. 鼠标的进入和离开的检测【方法一】重写构件的enterEvent()、leaveEvent()方法。注意,focusInEvent()和focusOutEven...
  • FreeApe
  • FreeApe
  • 2015年05月21日 22:14
  • 1307

Qt 5滚动字幕(左/右)+闪烁效果(QLabel控件显示)

一、说明: Qt版本为:Qt 5.9.1 二、简单解述: 1、字幕效果主要是应用QString QString::mid(int pos, int n = -1) const函数截取字符,另外需...
  • WU9797
  • WU9797
  • 2017年12月07日 15:51
  • 187

Qt5滚动字幕(左/右)+闪烁效果

  • 2017年12月07日 16:14
  • 816KB
  • 下载

Qt浅谈之三十七界面文字显示动态化

一、简介         最近项目中有需求:界面显示时所有的静态数据都以动态刷新的方式显示。在原来的代码上加上几个定时器QTimer就可以实现了,处理好showEvent和hideEvent事件...
  • taiyang1987912
  • taiyang1987912
  • 2015年12月11日 17:30
  • 4107
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt实现滚动字幕效果
举报原因:
原因补充:

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