qt学习:button上叠加label进行文字滚动

devtools/2024/11/28 15:53:01/

步骤

  • 定义一个继承QLabel的ScrollingLabel类
  • 在所需的界面类ui上定义一个button,定义全局变量
  • 运用

scrollinglabel.h

#ifndef SCROLLINGLABEL_H
#define SCROLLINGLABEL_H#include <QLabel>
#include <QPushButton>
#include <QLabel>
#include <QTimer>
#include <QPainter>class ScrollingLabel : public QLabel
{
public:explicit ScrollingLabel(QWidget *parent = nullptr);protected:void paintEvent(QPaintEvent *event) override ;private slots:void updateOffset();private:int offset;       // 当前滚动的偏移量QTimer *timer;    // 定时器控制滚动
};#endif // SCROLLINGLABEL_H

scrollinglabel.cpp

#include "scrollinglabel.h"
#include <QPushButton>
#include <QLabel>
#include <QTimer>
#include <QPainter>ScrollingLabel::ScrollingLabel(QWidget *parent): QLabel(parent), offset(0) {setStyleSheet("color: white; background: transparent;"); // 设置文本为白色,背景透明// 定时器滚动timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &ScrollingLabel::updateOffset);timer->start(100);
}
void ScrollingLabel::paintEvent(QPaintEvent *event){QPainter painter(this);// 设置文本的字体和颜色painter.setPen(Qt::white);painter.setFont(font());// 获取文本的宽度int textWidth = fontMetrics().horizontalAdvance(text());// 判断文本的宽度有没有大于label宽度if (textWidth > width()) {// 偏移位置int x = -offset % textWidth;painter.drawText(x, height() / 2 + fontMetrics().ascent() / 2, text());painter.drawText(x + textWidth, height() / 2 + fontMetrics().ascent() / 2, text());} else {// 如果文本宽度小于控件宽度,则居中绘制painter.drawText(rect(), Qt::AlignCenter, text());}
}
void ScrollingLabel::updateOffset() {offset += 2;update();
}

运用

    ScrollingLabel *scrollLabel;scrollLabel = new ScrollingLabel(ui->btn);scrollLabel->setStyleSheet("color: white; background: transparent;"); // 文本白色,背景透明scrollLabel->setAlignment(Qt::AlignCenter);scrollLabel->setText("");scrollLabel->resize(ui->btn->width() - 40 , ui->btn->height());scrollLabel->move(20, 0);scrollLabel->setText(text);


http://www.ppmy.cn/devtools/137700.html

相关文章

2023年十四届蓝桥杯Scratch01月stema选拔赛—鹦鹉学舌

第14届蓝桥杯Scratch01月stema选拔赛真题 点击下方链接&#xff0c;查看程序演示效果&#xff1a; https://www.hixinao.com/scratch/creation/show-331.html 如需查看选择题、编程题、全套真题可自行前往题库中心&#xff0c;按需查找&#xff5e; 题库中心支持在线刷题&…

UE5肉鸽游戏教程学习

学习地址推荐&#xff1a;UE5肉鸽项目实战教程_哔哩哔哩_bilibili

365天深度学习训练营-第P6周:VGG-16算法-Pytorch实现人脸识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文为「365天深度学习训练营」内部文章 参考本文所写记录性文章&#xff0c;请在文章开头带上「&#x1f449;声明」 &#x1f37a;要求&#xff1a; 保存训练过…

docker上手记录

一、前言 docker是一个将软件虚拟化的工具,可以在任意设备上,建立虚拟机跑软件,实现快速环境搭建运行 二、安装 自行百度,不造轮子了 三、配置 1. docker的默认网段 修改/etc/docker/daemon.json默认的网段是172.17.0.0/12,size是16。代表分配的网桥段是172.[17-31].…

pycharm2021.1汉化失败 “chinese (simplified) language pack“ was not installed

汉化报错&#xff1a;pycharm plugin “chinese (simplified) language pack” was not installed : Invalid filename returned by a server 翻译&#xff1a;pycharm 插件“中文&#xff08;简体&#xff09;语言包”未安装&#xff1a;服务器返回的文件名无效 解决&#…

Vue 3 学习文档(一)

最近打算做一个项目&#xff0c;涉及到一些前端的知识&#xff0c;因上一次接触前端已经是三四年前了&#xff0c;所以捡一些简单的功能做一下复习。 响应式函数&#xff1a;reactive 和 ref属性绑定&#xff1a;v-bind 和简写语法事件监听&#xff1a;v-on 和简写语法 双向绑…

femor 第三方Emby应用全平台支持v1.0.54更新

femor v1.0.54 版本更新 mpv播放器增加切换后台和恢复时隐藏状态栏的功能修复服务器首页因为连接超时异常的问题 获取路径&#xff1a;【femor 历史版本收录】

云原生自动化测试之命令行工具自动化测试设计思路分享

对于之前聊过的关于云原生自动化测试&#xff0c;设计实现来临&#xff0c;如果你在工作中涉及到了这部分&#xff0c;可以参考这个架构。 云原生自动化主要分为两个部分&#xff0c;云原生接口自动化/云原生CMD命令行自动化&#xff0c;本章节主要讲述命令行自动化&#xff0…