您当前的位置: 首页 >  qt

wendy_ya

暂无认证

  • 1浏览

    0关注

    342博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Qt实战案例(24)——利用QTimer实现字幕滚动功能

wendy_ya 发布时间:2022-01-14 14:45:31 ,浏览量:1

目录
    • 一、项目介绍
    • 二、项目基本配置
    • 三、UI界面设计
    • 四、主程序实现
      • 4.1 widget.h头文件
      • 4.2 widget.cpp源文件
    • 五、效果演示

一、项目介绍

利用QTimer实现字幕滚动功能,可以实现自行更改文本内容、自适应文本大小、自由调整速度等功能。

二、项目基本配置

新建一个Qt案例,项目名称为“TextScroll”,基类选择“QWidget”,取消创建UI界面复选框的选中状态,完成项目创建。

三、UI界面设计

无UI界面

四、主程序实现 4.1 widget.h头文件

声明私有变量和事件:

private:

    QTimer* timer;          //时间定时器
    QRgb   textColor;       //文本颜色
    QString m_text;         //文本内容
    QString m_showText;     //显示
    QFont font;             //字体
    int m_ms;
    int m_pixelSize;
    int m_moveOffset;
    int m_moveSize;
    int blankSuffix;     //空白后缀,值越大空白后缀越多
    float speed;        //滑动速度,值越大越快

    void paintEvent(QPaintEvent *event);
    void resizeEvent(QResizeEvent *event);

声明函数和槽函数:

public:
    void setDelay(int ms,int pixelSize);  //设置滚动延迟,多少ms滚动多少像素点

    void setText(QString text,QRgb textColor,float speed=0.70,int blankSuffix=20); //设置字体,调用该函数后,将会自动启动定时器来滚动字幕
    //void restart();

public slots:
    void timeOut();
4.2 widget.cpp源文件

主函数内容如下:

    resize(600,100);//调整窗口大小
    timer = new QTimer(this);//创建定时器
    connect(timer, SIGNAL(timeout()), this, SLOT(timeOut()));

    QString text="人生百相,世态万千,悲悲喜喜,才构成了人生的完美;谋事在人,成事在天。"
        "做过的事不要后悔。经常可以看到不少人自怨自艾,"
        "为曾经做过的错事后悔不已,为过去的事而消沉,为过去的事而落魄。世上永远没有后悔药。";
    QRgb textColor=qRgb(67,142,219);//字体颜色——蓝色
    float speed=0.4;
    int blankSuffix=0;
    setText(text,textColor,speed,blankSuffix);

timeOut()槽函数:

//槽函数
void Widget::timeOut(){
    qDebug()blankSuffix = blankSuffix;
    this->speed = speed;

    font.setFamily("Microsoft Yahei");//字体样式——微软雅黑
    font.setPixelSize(height()*0.0001); //字体像素大小

    this->textColor = textColor;    //字体颜色

    m_text = text;                  //文本内容
    m_showText = m_text;            //显示内容

    //计算字符大小
    QFontMetrics metrics(font);
    int char_w = metrics.horizontalAdvance(" ");//Qt5.11之后,之前请用width()
    setDelay(50,char_w*speed);//调用setDelay()函数,设置滚动延时

    int blankLine =width()/char_w+2;//

    for(int i=0;iisActive())
    {
        if(m_ms)
        {
            timer->start(m_ms);//启动计时,以m_ms为间隔
        }
    }

}
五、效果演示

完整效果如下: 在这里插入图片描述

如果没有看懂的话,完整代码可以参考:https://download.csdn.net/download/didi_ya/75814629

ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~

关注
打赏
1659256378
查看更多评论
立即登录/注册

微信扫码登录

0.1321s