Qt控件页边距的奇怪行为

Qt控件页边距的奇怪行为,qt,qt5.2,Qt,Qt5.2,我刚刚开始使用Qt5.3,遇到了一个事实,即一些控件显示的边距是我无法控制的 首先,我尝试将QLabel和QPushButton放在QMainWindow中 window = new QMainWindow; label = new QLabel( title, window ); 在这种情况下,标签在顶部显示12像素的边距,请参见图片。 QPushButton以1像素的左上边距显示。 但如果我插入带边框的QFrame,它将显示为没有任何边距 所以边距似乎是QLabel和QPushButton

我刚刚开始使用Qt5.3,遇到了一个事实,即一些控件显示的边距是我无法控制的

首先,我尝试将QLabel和QPushButton放在QMainWindow中

window = new QMainWindow;
label = new QLabel( title, window );
在这种情况下,标签在顶部显示12像素的边距,请参见图片。 QPushButton以1像素的左上边距显示。 但如果我插入带边框的QFrame,它将显示为没有任何边距

所以边距似乎是QLabel和QPushButton的属性。 但是:

当我试图在窗口和控件之间添加额外的QFrame时:

window = new QMainWindow;
frame = new QFrame(window );
label = new QLabel( title, frame);
我得到了不同的图片: QLabels上边距已缩短到1像素 QPushButton 1像素边距保持不变,但按钮的高度已更改

我试过: setStyleSheet填充:0px 和 setContentsMargins 0,0,0,0

对于所有元素,但没有任何成功

任何帮助都将不胜感激

QMainWindow类的设计目的不是直接向其添加小部件。无论你看到什么结果都是由于这个事实

您看到的边距并不是真正的边距。因为QLabel是QFrame,所以您可以让它的框架看到它没有边距——只是文本从边缘偏移,这是出于设计。类似地,您可以在QPushButton上覆盖相同大小的半透明矩形,以查看也没有边距,只是样式添加了自己的平台特定边距。不要将平台样式化机制误认为是样式表:它们是两个独立的机制,并且大部分是独占的,使用后者会禁用前者的效果,很少有例外。例如,样式表间距/页边距/填充是平台样式所要求的任何内容的附加内容


有关如何在没有子类化的情况下在任何小部件上显示覆盖的示例,请参见。

我应该使用什么样的小部件来添加控件?我需要指定控件在其父控件中的确切位置,就像在Win32中一样。我不需要布局提供的安排。@BorisL QWidget。请注意,对于用户可以交互的控件,指定固定位置是毫无意义的,因为这些控件不能具有任意大小。当您强制调整某些尺寸(如按钮的垂直尺寸)时,它们将不再像本机控件,因为本机控件具有固定的某些尺寸。因此,只有在使用样式表禁用平台样式时,这才有意义。