码迷,mamicode.com
首页 > 其他好文 > 详细

关于qt 实现laber上面的文字滚动

时间:2019-04-15 16:37:36      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:width   info   timeout   ini   下标   etc   war   运行   ssi   

写代码前。首先我们肯定要新建一个项目。

1.点击文件新建文件或项目

技术图片

2.选择带界面的。名称自己写。然后继承widget。完成

技术图片

 

3.这样,我们就得到了一个空的gui项目了。

 

新建一个能实现文字滚动的头.h文件和对应的.cpp文件

这一次选择c++类。点击下一步我们就会得到一个自己写好名字的头文件和源文件了

技术图片

 

 接下来就是代码了。这是头文件

随便提一下,这里我们重写了laber的绘画事件

以及新建了一个更新需要滚动的文字下标值类。

 1 #include <QLabel>
 2 
 3 class TextTicker : public QLabel
 4 {
 5     Q_OBJECT
 6 
 7 
 8 public:
 9     TextTicker(QWidget *parent = nullptr);
10     ~TextTicker();
11 
12 
13 protected:
14     void paintEvent(QPaintEvent *);
15     void updateIndex();
16 
17 private:
18     int m_charWidth; //字符串宽度
19     int m_curIndex;
20     QString m_showText; //需要显示的字符串
21 public:
22 
23     QString getText()
24     {
25         return  m_showText;
26     }
27 };

接下来是源文件

这里预编译这里注意添加上自己的头文件  #include "xxx.h"

#include <QPainter>
#include <QTimer>


TextTicker::TextTicker(QWidget *parent)
    : QLabel(parent)
{
//    setMinimumWidth(200);
//    setMinimumHeight(40);


    m_curIndex = 0;//当前文字下标值
    m_showText = tr("Welcome to the image processing software of Star Dragon Company");//显示的文字


    m_charWidth = fontMetrics().width("a");//每个字符的宽度


    QTimer *timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &TextTicker::updateIndex);
    timer->start(100);
}


TextTicker::~TextTicker()
{


}


void TextTicker::paintEvent(QPaintEvent *)
{
    QPen pen;
    pen.setColor(QColor(255,0,255));

       pen.setStyle(Qt::DashDotDotLine);

       QFont font("楷体",14,QFont::Bold);

       
    QPainter painter(this);
    painter.setPen(pen);

    painter.setFont(font);
    painter.drawText(0, 15, m_showText.mid(m_curIndex));
    painter.drawText(width() - m_charWidth*m_curIndex, 15, m_showText.left(m_curIndex));
}


void TextTicker::updateIndex()
{
    update();
    m_curIndex++;
    if (m_curIndex*m_charWidth > width())
        m_curIndex = 0;
}

  到这里基本就完成了。

接下来要做的就是在gui拖入一个laber控件。右键点击提升。类名填写我们创建的类,注意。如果头文件跟类名不一致,注意对应填写即可。

然后运行。试试效果把。

自己做项目中遇到的记录下来。

关于qt 实现laber上面的文字滚动

标签:width   info   timeout   ini   下标   etc   war   运行   ssi   

原文地址:https://www.cnblogs.com/787959687-freedom/p/10710863.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!