C++ Qtabel页边距和Qt中标签中的样式表填充

C++ Qtabel页边距和Qt中标签中的样式表填充,c++,qt,qtstylesheets,C++,Qt,Qtstylesheets,我有一个标签,我使用setMargin() 但现实情况是这样的: 可见的边距是5、10、15和20(我用图像编辑器检查过)。也就是说,它们等于该侧样式表的值加上margin()的值,即0+5、5+5、10+5、20+5 但是,文档中提到了关于setMargin(): margin:int此属性保存边距的宽度 边距是帧最内侧像素之间的距离 以及内容的最外层像素 默认边距为0 如果我只是从表面上看文档,我会期望边距是内容和边框之间的实际距离。但事实并非如此。相反,边距和样式表填充的总和是实际边距

我有一个标签,我使用
setMargin()

但现实情况是这样的:

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

但是,文档中提到了关于
setMargin()

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

边距是帧最内侧像素之间的距离 以及内容的最外层像素

默认边距为0

如果我只是从表面上看文档,我会期望边距是内容和边框之间的实际距离。但事实并非如此。相反,边距和样式表填充的总和是实际边距


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

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

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


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

您可以使用QPushButton而不是QLabel。QPushButton没有此错误。 您可以使用高级选择器筛选替换的“QLabel”

使用
Qt::WA_TransparentForMouseEvents
使其不可单击,并使用样式表将其添加到类似QLabel的样式中

我也有问题,报告了一个bug,但没有解决


在QPushButton中也有bug。边框:1px实心#000000;在两个样式表中使用添加左1像素的填充。。。这项技术还不发达

好的,我接受这个答案,但我想指出的是,文档中说“边距是框架最里面的像素和内容最外面的像素之间的距离”。他们没有说“除非有样式表填充”。请注意,它们将其定义为最外层像素和最内层像素之间的距离,因此根据该定义,文档完全不正确。@sashoalm在
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);