【问题标题】:Strange behavior of margins for Qt controlsQt 控件边距的奇怪行为
【发布时间】:2014-09-19 21:28:07
【问题描述】:

我刚开始使用 Qt (5.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 )

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

任何帮助将不胜感激

【问题讨论】:

    标签: qt qt5.2


    【解决方案1】:

    QMainWindow 类并非旨在直接向其添加小部件。无论你看到什么结果都是由于这个事实。

    您看到的“边距”并不是真正的边距。由于QLabelQFrame,因此您可以启用它的框架以查看它没有边距 - 只是文本从边缘偏移,这是设计使然。您可以类似地在QPushButton 上覆盖相同大小的半透明矩形,以查看也没有边距,只是样式添加了自己的特定于平台的边距。不要将平台样式机制误认为样式表:它们是两个独立的机制,而且大多是互斥的,使用后者会禁用前者的效果,几乎没有例外。例如,样式表间距/边距/填充是平台样式要求的附加内容。

    请参阅this answer,了解如何在任何小部件上显示覆盖而不使用子类化的示例。

    【讨论】:

    • 我应该使用什么样的小部件来添加控件?我需要在其父控件中指定控件的确切位置,例如在 Win32 中。我不需要布局提供的安排。
    • @BorisL QWidget。请注意,对于用户可以与之交互的控件,指定固定位置是毫无意义的,因为这些控件不能具有任意大小。当您强制调整它们的某些尺寸(例如按钮的垂直尺寸)时,它们看起来不再像本机控件,因为本机控件具有固定的某些尺寸。所以这只有在您使用样式表来禁用平台样式时才有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2018-08-15
    • 2011-10-11
    相关资源
    最近更新 更多