文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Qt如何实现字幕滚动效果

2023-07-02 10:02

关注

这篇文章主要介绍“Qt如何实现字幕滚动效果”,在日常操作中,相信很多人在Qt如何实现字幕滚动效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Qt如何实现字幕滚动效果”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、项目介绍

利用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()<<m_moveOffset<<m_moveSize;    m_moveOffset+=m_pixelSize;    if(m_moveOffset>m_moveSize)    {        m_moveOffset= 0;    }    update();}

调整窗口大小resizeEvent事件:

void Widget::resizeEvent(QResizeEvent *event){    font.setPixelSize(event->size().height()*0.75);//字体大小(这里设置为窗口高度的0.75倍)    m_showText = m_text;    QFontMetrics metrics(font);    int char_w = metrics.horizontalAdvance(" ");//Qt5.11之后,之前请用width()    setDelay(30,char_w*speed);//滚动延时    int blankLine =width()/char_w+1;    for(int i=0;i<blankLine;i++)    {        m_showText.insert(0," ");//开头插入blankLine个空格    }    m_moveSize=metrics.horizontalAdvance(m_showText)+blankSuffix;    m_moveOffset=0;    update();}

重写绘制事件paintEvent:

//绘图事件void Widget::paintEvent(QPaintEvent *event){      QPainter painter(this);      painter.setFont(font);//设置字体      painter.setPen(QColor(120,120,120));//设置画笔颜色——灰色      painter.drawRect(QRect(0,0,width()-1,height()-1));//主窗口绘制矩形      painter.setPen(QColor(textColor));//文字颜色      painter.drawText(QRect(-m_moveOffset,0,width()-1+m_moveOffset,height()-1),                       Qt::AlignVCenter|Qt::AlignLeft,m_showText);//绘制文字,水平居左垂直居中}

定义滚动延迟函数:

//设置滚动延迟,多少ms滚动多少像素点pixelSizevoid Widget::setDelay(int ms,int pixelSize){    this->m_ms=ms;    this->m_pixelSize=pixelSize;}

设置字体相关信息:

//设置字体相关信息(text:字体内容,textColor:颜色,speed:字体滚动速度,blankSuffix:留白大小)void Widget::setText(QString text, QRgb textColor, float speed, int blankSuffix){    this->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;i<blankLine;i++)    {        m_showText.insert(0," ");//开头插入blankLine个空格    }    m_moveSize=metrics.horizontalAdvance(m_showText)+blankSuffix;    m_moveOffset=0;    //如果计时器没有运行    if(!timer->isActive())    {        if(m_ms)        {            timer->start(m_ms);//启动计时,以m_ms为间隔        }    }}

五、效果演示

完整效果如下:

Qt如何实现字幕滚动效果

到此,关于“Qt如何实现字幕滚动效果”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯