查看完整版本: [-- QSlideText电子滚动屏[附源码] --]

QTCN开发网 -> Qt 作品展 -> QSlideText电子滚动屏[附源码] [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

hunt978 2019-08-13 15:15

QSlideText电子滚动屏[附源码]

QSlideText电子滚动屏

* 支持静止、滚动、闪烁三种模式
* 支持左、中、右三种对齐方式
* 支持多处颜色设置
* 支持网格大小设置
* 支持重回间隔设置

属性列表

[attachment=20697]


动效


代码仓库
https://github.com/hunt978/qslidetext

核心代码

  1. void update(bool repaint)
    {
      Q_Q(QSlideText);

      // mode check
      if (m_text.isEmpty()) {
        m_mode = QSlideText::Still;
      }

      // draw backgroud
      if (repaint) {
        // prepare background
        m_bckLayer = m_bckLayer.scaled(q->size());
        m_bckLayer.fill(m_backgroundColor);
        QPainter painter(&m_bckLayer);

        // draw boder
        painter.setPen(m_boderColor);
        painter.drawRect(0, 0, q->width() - 1, q->height() - 1);
      }

      // draw grid
      if (repaint) {
        // prepare background
        m_gridLayer = m_gridLayer.scaled(q->size());
        m_gridLayer.fill(QColor(0, 0, 0, 0));
        QPainter painter(&m_gridLayer);

        // draw grid
        m_gridColor.setAlpha(127);
        painter.setPen(m_gridColor);
        for (int i = 0; i < q->width(); i += m_gridStep) {
          painter.drawLine(i, 0, i, q->height());
        }
        for (int j = 0; j < q->height(); j += m_gridStep) {
          painter.drawLine(0, j, q->width(), j);
        }
      }

      // draw text
      if (repaint) {
        // fetch font
        QFont font = q->font();
        font.setPixelSize(q->height() * 0.8);

        // test size
        m_textRect = QFontMetrics(font).boundingRect(m_text);
        m_drawRect = m_textRect;
        if (q->width() > m_drawRect.width()) {
          m_drawRect.setWidth(q->width());
        }
        m_drawPosY = (q->height() - m_textRect.height()) / 2;

        // prepare text layer
        if (m_drawRect.width() && m_drawRect.height()) {
          m_txtLayer = m_txtLayer.scaled(m_drawRect.size());
        }
        m_txtLayer.fill(QColor(0, 0, 0, 0));
        QPainter painter(&m_txtLayer);

        // draw text
        painter.setFont(font);
        painter.setPen(m_textColor);
        painter.drawText(m_txtLayer.rect(), 0, m_text);
      }

      // setup timer
      {
        int interval = 0;
        switch (m_speed) {
          case QSlideText::VerySlow:
            interval = 500;
            break;
          case QSlideText::Slow:
            interval = 250;
            break;
          case QSlideText::Fast:
            interval = 25;
            break;
          case QSlideText::VeryFast:
            interval = 5;
            break;
          case QSlideText::Normal:
          default:
            interval = 50;
            break;
        }

        // start timer
        if (m_mode == QSlideText::Slide || m_mode == QSlideText::Intermittent) {
          m_timer.start(interval);
        } else {
          if (m_timer.isActive()) {
            m_timer.stop();
          }
        }
      }

      // update draw position
      {
        if (m_mode == QSlideText::Still) {
          if (m_algin == QSlideText::AlignCenter) {
            m_drawPosX = (q->width() - m_textRect.width()) / 2;
          }
          if (m_algin == QSlideText::AlignLeft) {
            m_drawPosX = 0;
          }
          if (m_algin == QSlideText::AlignRight) {
            m_drawPosX = q->width() - m_textRect.width();
          }
        }
      }

      // request update
      q->update();
    }





九重水 2019-08-13 16:13
老牛二来了?
要不要也来个一二三序号啊?来几个序列。

liudianwu 2019-08-13 16:33
九重水:老牛二来了?
要不要也来个一二三序号啊?来几个序列。[表情]  (2019-08-13 16:13) 

老哥,赶紧调查下这到底是哪位?到底是谁干的!

gaoheyang 2019-08-14 08:49
如果要获取字符点阵数据该如何获取呢?

九重水 2019-08-14 09:05
liudianwu:老哥,赶紧调查下这到底是哪位?到底是谁干的! (2019-08-13 16:33) 

是不是忽然有点竞争的危机感,哈哈哈!
支持有序竞争,哈哈!

九重水 2019-08-14 09:07
gaoheyang:如果要获取字符点阵数据该如何获取呢? (2019-08-14 08:49) 

我没看代码,我瞄了一眼,这不是点阵(一开始我也以为是点阵),它就是划横竖线,造成点阵的错觉。(我真没看代码,虽然我知道有点阵字体生成器,也有很多开源的点阵字体生成代码)

yunchao630 2019-08-14 09:24
Qt最大的特点就是 开源了也没人看代码

liudianwu 2019-08-14 09:58
九重水:是不是忽然有点竞争的危机感,哈哈哈![表情]
支持有序竞争,哈哈! (2019-08-14 09:05) 

是啊,现在心里慌得一逼,一晚上睡不着!

onlyone 2019-08-14 11:38
发源代码打包发出来看看呢,还有那个 属性框那个,能不能给出了一下,我最近整好需要用下。

hunt978 2019-08-19 16:23
完整工程在提供的代码仓库里。

clickto 2019-08-19 21:33
九重水:我没看代码,我瞄了一眼,这不是点阵(一开始我也以为是点阵),它就是划横竖线,造成点阵的错觉。(我真没看代码,虽然我知道有点阵字体生成器,也有很多开源的点阵字体生成代码) (2019-08-14 09:07) 

直接就是文本上再画一层栅格,造成类似效果。
不过,貌似楼主也没有说是点阵字体,只是电子屏效果。


查看完整版本: [-- QSlideText电子滚动屏[附源码] --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled