【问题标题】:Why do custom QWidgets, but not the built-in ones, have nonzero margins?为什么自定义小部件而不是内置小部件具有非零边距?
【发布时间】:2015-11-25 22:10:31
【问题描述】:

这是一个包含一系列小部件的 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 也不能解决问题。

我没有尝试过似乎使这些自定义布局 QWidget 周围的间距与 API 提供的小部件保持一致。

我错过了什么?谢谢。

【问题讨论】:

标签: qt qt5


【解决方案1】:

你观察到的是多平台用户界面的斗争和一些小部件很糟糕的简单事实。鉴于有限的时间和一项艰巨的任务,开发团队不会公平对待这组功能。强大的小部件和布局,如标准小部件 QGridLayout,将日夜维护以确保无缺陷,而像 QStackedWidget 这样的旧版小部件将被推到维护队列的底部。

我尝试单独使用设计器重现您的问题,这就是我得到的结果(Qt 4.8):

你能看到什么:

  • 带有小部件容器的第二行有很大的边距
  • 第三行甚至没有显示组合框(我发誓它就在那里!!)。

我的两分钱:

  1. 第二行的行为有所不同。因为我使用了Qt4 而你使用了Qt5,并且我们都将QHBoxLayout 边距设置为零,所以这意味着在Qt5 或Linux 实现中存在潜在的回归。 所以这证实了你的怀疑
  2. QStackedWidget可怕的。它是提供快速和基本功能而不是实现真正交易的常用小部件。这将是一个带有QStackedLayout 的小部件。就像我说的那样,当需要大量开发工作时,我怀疑这类小部件会受到较少的喜爱。
  3. 在这些情况下,使用QGridLayout 而不是带有小部件布局的小部件QStackedLayout。它将解决标签未对齐的问题。一开始很难设置,但结果通常很整洁。

顺便说一句,我切换到一个带有堆叠布局的小部件,结果如下:

【讨论】:

  • 抱歉,错字,一直是 QStackedLayout。无论如何,我在不使用堆叠布局的地方遇到了类似的问题,只是盒子中的盒子。
猜你喜欢
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2015-07-27
  • 2022-01-03
  • 2020-01-04
相关资源
最近更新 更多