Qt实用技巧:多QLabel不规则间距像素对齐文本方式实现

若该文为原创文章,转载请注明原文出处

本文章博客地址:https://hpzwl.blog.csdn.net/article/details/160153038

红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...

Qt开发专栏:实用技巧

需求

  需要对齐。

  提出这个问题是有多个文本,文字字数完全不同,不可以通过空格来实现了(空格对不齐)的情况。

  

实现方式1(通过富文本实现,失败)

  通过富文本加上字符串解析的形式实现:

  通过span,p,text都无效。

实现方式2:通过font

  为了实现,将引号拆开,然后其他实现:

  

  

  代码通过font控制间距+右侧的字体来实现文本(因为每个字都会受字符宽度影响,导致靠右边也会变化,所以最右边的字也是固化的)

  最右侧的字和冒号构成一个QLabel。

  实现代码如下:

cpp 复制代码
QFrame *pFrame = new QFrame(parent);
pFrame->setGeometry(x, y, 182, 32);
{
    // 名称
    {
        QLabel *pLabel = new QLabel(pFrame);
        pLabel->setGeometry(0, 0, 150 - 40, 32);
        // 组合字符串
        QFont font = pLabel->font();
        font.setLetterSpacing(QFont::AbsoluteSpacing, space);
        pLabel->setFont(font);
        pLabel->setText(name.left(name.size() - 1));
        pLabel->setAlignment(Qt::AlignVCenter | Qt::AlignRight);
        pLabel->setStyleSheet("color: #FFFFFF; "
                              "font-size: 21px;"
                              "font-family: \"Source Han Sans CN\";");
        ShadowEffectManager::setShadowEffectManager(pLabel);
    }
    // 冒号
    {
        QLabel *pLabel = new QLabel(pFrame);
        pLabel->setGeometry(150 - 40, 0, 40, 32);
        // 组合字符串
        pLabel->setText(QSTRING("%1:").arg(name.right(1)));
        pLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
        pLabel->setStyleSheet("color: #FFFFFF; "
                              "font-size: 21px;"
                              "font-family: \"Source Han Sans CN\";");
        ShadowEffectManager::setShadowEffectManager(pLabel);
    }
    // 灯
    {
        QLabel *pLabel = new QLabel(pFrame);
        pLabel->setGeometry(150, 0, 32, 32);
        pLabel->setText("");
        pLabel->setStyleSheet("border-image: url(:/homeWidget/images/red.png);");
        *ppLabelLed = pLabel;
    }
}

本文章博客地址:https://hpzwl.blog.csdn.net/article/details/160153038

相关推荐
死磕音视频7 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
顽疲9 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
用户8334423966149 小时前
从批量操作到任务中心,再到现场工作台:DeviceForge v2.10—v2.12 完整演进
qt
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
宛 禾11 小时前
Qt 控件入门:QLabel 从拖拽到对象树,一篇讲透
c++·qt·学习
程序喵大人11 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
微三云 - 廖会灵 (私域系统开发)11 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
学逆向的12 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全
霸道流氓气质12 小时前
AgentFlow 入门与实战:Task-Based 并发、EWMA 动态调度与四道门禁的 Java 生产级编排
java·开发语言
释厄62313 小时前
错误无误公理——错误正确本同源都迭代定律——逆转有价值
android·开发语言·kotlin