• 3322阅读
  • 10回复

QSlideText电子滚动屏[附源码] [复制链接]

上一主题 下一主题
离线hunt978
 

图酷模式  只看楼主 倒序阅读 楼主  发表于: 2019-08-13
QSlideText电子滚动屏

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

属性列表




动效


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

核心代码

  1. void update(bool repaint)
  2. {
  3.   Q_Q(QSlideText);
  4.   // mode check
  5.   if (m_text.isEmpty()) {
  6.     m_mode = QSlideText::Still;
  7.   }
  8.   // draw backgroud
  9.   if (repaint) {
  10.     // prepare background
  11.     m_bckLayer = m_bckLayer.scaled(q->size());
  12.     m_bckLayer.fill(m_backgroundColor);
  13.     QPainter painter(&m_bckLayer);
  14.     // draw boder
  15.     painter.setPen(m_boderColor);
  16.     painter.drawRect(0, 0, q->width() - 1, q->height() - 1);
  17.   }
  18.   // draw grid
  19.   if (repaint) {
  20.     // prepare background
  21.     m_gridLayer = m_gridLayer.scaled(q->size());
  22.     m_gridLayer.fill(QColor(0, 0, 0, 0));
  23.     QPainter painter(&m_gridLayer);
  24.     // draw grid
  25.     m_gridColor.setAlpha(127);
  26.     painter.setPen(m_gridColor);
  27.     for (int i = 0; i < q->width(); i += m_gridStep) {
  28.       painter.drawLine(i, 0, i, q->height());
  29.     }
  30.     for (int j = 0; j < q->height(); j += m_gridStep) {
  31.       painter.drawLine(0, j, q->width(), j);
  32.     }
  33.   }
  34.   // draw text
  35.   if (repaint) {
  36.     // fetch font
  37.     QFont font = q->font();
  38.     font.setPixelSize(q->height() * 0.8);
  39.     // test size
  40.     m_textRect = QFontMetrics(font).boundingRect(m_text);
  41.     m_drawRect = m_textRect;
  42.     if (q->width() > m_drawRect.width()) {
  43.       m_drawRect.setWidth(q->width());
  44.     }
  45.     m_drawPosY = (q->height() - m_textRect.height()) / 2;
  46.     // prepare text layer
  47.     if (m_drawRect.width() && m_drawRect.height()) {
  48.       m_txtLayer = m_txtLayer.scaled(m_drawRect.size());
  49.     }
  50.     m_txtLayer.fill(QColor(0, 0, 0, 0));
  51.     QPainter painter(&m_txtLayer);
  52.     // draw text
  53.     painter.setFont(font);
  54.     painter.setPen(m_textColor);
  55.     painter.drawText(m_txtLayer.rect(), 0, m_text);
  56.   }
  57.   // setup timer
  58.   {
  59.     int interval = 0;
  60.     switch (m_speed) {
  61.       case QSlideText::VerySlow:
  62.         interval = 500;
  63.         break;
  64.       case QSlideText::Slow:
  65.         interval = 250;
  66.         break;
  67.       case QSlideText::Fast:
  68.         interval = 25;
  69.         break;
  70.       case QSlideText::VeryFast:
  71.         interval = 5;
  72.         break;
  73.       case QSlideText::Normal:
  74.       default:
  75.         interval = 50;
  76.         break;
  77.     }
  78.     // start timer
  79.     if (m_mode == QSlideText::Slide || m_mode == QSlideText::Intermittent) {
  80.       m_timer.start(interval);
  81.     } else {
  82.       if (m_timer.isActive()) {
  83.         m_timer.stop();
  84.       }
  85.     }
  86.   }
  87.   // update draw position
  88.   {
  89.     if (m_mode == QSlideText::Still) {
  90.       if (m_algin == QSlideText::AlignCenter) {
  91.         m_drawPosX = (q->width() - m_textRect.width()) / 2;
  92.       }
  93.       if (m_algin == QSlideText::AlignLeft) {
  94.         m_drawPosX = 0;
  95.       }
  96.       if (m_algin == QSlideText::AlignRight) {
  97.         m_drawPosX = q->width() - m_textRect.width();
  98.       }
  99.     }
  100.   }
  101.   // request update
  102.   q->update();
  103. }




离线九重水

只看该作者 1楼 发表于: 2019-08-13
老牛二来了?
要不要也来个一二三序号啊?来几个序列。
离线liudianwu

只看该作者 2楼 发表于: 2019-08-13
回 九重水 的帖子
九重水:老牛二来了?
要不要也来个一二三序号啊?来几个序列。[表情]  (2019-08-13 16:13) 

老哥,赶紧调查下这到底是哪位?到底是谁干的!
欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线gaoheyang

只看该作者 3楼 发表于: 2019-08-14
如果要获取字符点阵数据该如何获取呢?
离线九重水

只看该作者 4楼 发表于: 2019-08-14
回 liudianwu 的帖子
liudianwu:老哥,赶紧调查下这到底是哪位?到底是谁干的! (2019-08-13 16:33) 

是不是忽然有点竞争的危机感,哈哈哈!
支持有序竞争,哈哈!
离线九重水

只看该作者 5楼 发表于: 2019-08-14
回 gaoheyang 的帖子
gaoheyang:如果要获取字符点阵数据该如何获取呢? (2019-08-14 08:49) 

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

只看该作者 6楼 发表于: 2019-08-14
Qt最大的特点就是 开源了也没人看代码
离线liudianwu

只看该作者 7楼 发表于: 2019-08-14
回 九重水 的帖子
九重水:是不是忽然有点竞争的危机感,哈哈哈![表情]
支持有序竞争,哈哈! (2019-08-14 09:05) 

是啊,现在心里慌得一逼,一晚上睡不着!
欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线onlyone

只看该作者 8楼 发表于: 2019-08-14
发源代码打包发出来看看呢,还有那个 属性框那个,能不能给出了一下,我最近整好需要用下。
离线hunt978

只看该作者 9楼 发表于: 2019-08-19
完整工程在提供的代码仓库里。
离线clickto

只看该作者 10楼 发表于: 2019-08-19
回 九重水 的帖子
九重水:我没看代码,我瞄了一眼,这不是点阵(一开始我也以为是点阵),它就是划横竖线,造成点阵的错觉。(我真没看代码,虽然我知道有点阵字体生成器,也有很多开源的点阵字体生成代码) (2019-08-14 09:07) 

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