2014-06-24 49 views
4

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

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); 

但是,这是它的外观在现实:

enter image description here

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

然而,文件说,这大约setMargin()

保证金:int该属性持有边距的宽度。

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

默认余量为0

如果我服用面值的文档,我本来期望的利润率是内容与边框之间的实际距离。但事实并非如此。相反,保证金和样式表填充的总和是实际的保证金。

我的问题是,在文档中描述了这种行为?在文档中是否存在其他地方,我已经错过了这种行为?

回答

3

样式表填充适用于全部控件,即使是那些不基于QLabel的控件。除了任何控制特定的机制之外,它还存在。 margin是一个QLabel特定属性,它早于样式表;它在Qt 4.0(至少)中可用。样式表后来在Qt 4.2中出现。

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

此外,请注意marginpadding是不同的术语。样式表指定了填充。 QLabel指定了余量。它们可能是同义词,但这与此无关。在QLabel的设置中它们仍然是不同的概念。视觉效果是由于两者。 4.0的边界行为必须在Qt 4.2中保留,以免破坏现有的代码。

+0

好的,我会接受答案,但我想指出的文件说:“边距是帧的最内像素和内容的最外像素之间的距离。”他们不会说“除非有样式表填充”。请注意,它们将其定义为最外像素和最内像素之间的距离,因此按照该定义,文档不是真实的。 – sashoalm

+0

@sashoalm在'QLabel'中,内容和框架之间没有单一的距离。您从文档中引用的句子在表面上是无意义的。这是一个文档错误。 –

0

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

使用Qt::WA_TransparentForMouseEvents使其不可点击并使用styleSheet添加它们类似QLabel的样式。

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

在QPushButton中也有bug。 border:1px solid#000000;在两个样式表中使用添加填充左侧1px ...此技术尚未开发。