c/c++语言开发共享Qt实现字幕滚动效果的示例代码

一、项目介绍利用qtimer实现字幕滚动功能,可以实现自行更改文本内容、自适应文本大小、自由调整速度等功能。二、项目基本配置新建一个qt案例,项目名称为“textscroll”

一、项目介绍

利用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滚动多少像素点pixelsize  void 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实现字幕滚动效果的示例代码的详细内容,更多关于qt字幕滚动的资料请关注<计算机技术网(www.ctvol.com)!!>其它相关文章!

需要了解更多c/c++开发分享Qt实现字幕滚动效果的示例代码,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1237838.html

(2)
上一篇 2022年9月10日
下一篇 2022年9月10日

精彩推荐