若该文为原创文章,转载请注明原文出处
本文章博客地址: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