【问题标题】:QLabel margin and style sheet padding in labels in QtQt标签中的QLabel边距和样式表填充
【发布时间】:2014-08-15 01:19:06
【问题描述】:

我有一个标签,我在样式表中设置了填充和使用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


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,我会接受答案,但我想指出文档说“边距是框架最内层像素与内容最外层像素之间的距离。”他们没有说“除非有样式表填充”。请注意,他们将其定义为最外层像素和最内层像素之间的距离,因此根据该定义,文档根本不正确。
    • @sashoalm 在QLabel 中,内容和框架之间没有单一的距离。因此,您从文档中引用的句子表面上看是荒谬的。这是一个文档错误。
    【解决方案2】:

    您可以使用 QPushButton 代替 QLabel。 QPushButton 没有这个错误。 您可以使用高级选择器来过滤您替换的“QLabels”。

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

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

    在 QPushButton 中也有错误。边框:1px 实心#000000;在两个样式表中使用增加了padding-left 1px...这个技术不发达。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-19
      • 2014-03-05
      • 2014-02-03
      • 1970-01-01
      • 2016-03-25
      • 2022-01-17
      • 1970-01-01
      相关资源
      最近更新 更多