Qt标签中的QLabel边距和样式表填充

问题描述 投票:4回答:2

我有一个标签,我在样式表中设置了填充,并使用setMargin()设置了边距。

ui->label->setPixmap(redRectWithGreenBorder(80, 40));
ui->label->setStyleSheet("QLabel {border: 1px solid gray;border-radius: 2px;background-color: white;padding: 0px 5px 10px 15px;}");
ui->label->setMargin(5);

但这就是它在现实中的表现:

可见边距为5,10,15和20(我使用图像编辑器检查)。也就是说,它们等于该侧的样式表的值加上margin()的值,即0 + 5,5 + 5,10 + 5,20 + 5。

但是,文档说这关于setMargin()

margin:int此属性保存边距的宽度。

边距是帧的最内部像素与内容的最外部像素之间的距离。

默认边距为0。

如果我按照面值获取文档,我会预期边距是内容和边框之间的实际距离。但事实并非如此。相反,边距和样式表填充的总和是实际边距。

我的问题是,文档中描述的这种行为在哪里?文档中是否还有其他地方指定了我错过的行为?

c++ qt qtstylesheets
2个回答
3
投票

样式表填充适用于所有控件,甚至是那些不基于QLabel的控件。它存在于任何控制特定机制之外。 margin是一种特定于QLabel的属性,早于样式表;它在Qt 4.0(至少)中可用。样式表稍后出现在Qt 4.2中。

另一种思考方式:行为可以从这样一个事实推断,即只有一个margin属性,而不是四个。此属性与样式表填充无关,因为后者为您提供了4个单独的填充值。除了添加它们之外,没有其他方法可以协调它们。

另外,请注意marginpadding是不同的术语。样式表指定填充。 QLabel指定了保证金。它们可能是同义词,但这与此无关。在QLabel的背景下,它们仍然是不同的概念。视觉结果归因于两者。必须在Qt 4.2中保留4.0边距的行为,以免破坏现有代码。


0
投票

您可以使用QPushButton而不是QLabel。 QPushButton没有这个bug。您可以使用高级选择器来过滤替换的“QLabel”。

使用Qt::WA_TransparentForMouseEvents使其无法点击并使用styleSheet添加类似QLabel的样式。

我也有问题,报告了一个错误但没有解决。

在QPushButton也有bug。 border:1px solid#000000;用于两个样式表添加padding-left 1px ...这项技术尚未开发。

© www.soinside.com 2019 - 2024. All rights reserved.