这是包含一系列小部件的 QFormLayout 的屏幕截图。请注意,顶部和底部输入小部件未与中间两行水平对齐。另请注意,左侧的标签未与中间两行垂直对齐。
不同之处在于顶部和底部小部件是普通的 QLineEdit 和 QTextEdit 小部件,第二行是 QWidget,其 QHBoxLayout 包含 QSpinBox 和 QDateTimeEdit,第三行是 QStackedLayout,其中包含 QWidget,每个 QWidget 都带有 QHBoxLayout 和 API 提供的小部件.
看起来这中间两个有额外的利润。我可以(部分)通过在普通 QWidgets 的布局上调用 QLayout::setContentsMargins 来改善这种情况。事实上,在上面的图片中我已经有了,没有它会更糟。
我没有干涉应用程序中的样式,这都是系统默认的。这似乎会影响 Ubuntu 15.04 上的 Qt5,我认为当它是 Qt4 应用程序时我没有看到这一点。
我试过setStyleSheet ("QWidget {margin:0;}")
在顶级小部件中,引入了各种问题。我还尝试了变体 setStyleSheet (".QWidget {margin:0;}")
但这没有任何效果。 QLayout::setSpacing 也没有效果,设置padding:0
在样式表中也没有修复它。
我没有尝试过似乎使这些自定义布局 QWidgets 周围的间距与 API 提供的小部件保持一致。
我错过了什么?谢谢。
最佳答案
你观察到的是多平台用户界面的斗争和一些小部件很糟糕的简单事实。鉴于有限的时间和一项艰巨的任务,开发团队不会公平对待这组功能。强大的小部件和布局,如标准小部件,QGridLayout
, 将日夜保持无缺陷,而像 QStackedWidget
这样的旧版小部件将被推到维护队列的底部。
我试图单独使用设计器重现您的问题,这就是我得到的( Qt 4.8 ):
你可以看到:
我的两分钱:
Qt4
而你 Qt5
,我们都设置了QHBoxLayout
margin 为零,则意味着在 Qt5 或 linux 实现中存在潜在的回归。 所以这证实了你的怀疑 . QStackedWidget
是 可怕的 .它是提供快速和基本功能而不是实现真正交易的常用小部件。这将是一个带有 QStackedLayout
的小部件.就像我说的那样,当需要大量的开发工作时,我怀疑这些小部件会受到较少的喜爱。 QGridLayout
而不是 QStackedLayout
具有小部件布局的小部件。它将解决标签未对齐的问题。一开始很难设置,但结果通常很整洁。 顺便说一句,我切换到一个带有stackedlayout的小部件,结果如下:
关于qt - 为什么自定义 QWidgets 而不是内置的 QWidgets 具有非零边距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32318632/