为什么自定义QWidgets而非内置QWidgets具有非零边距?

时间:2015-08-31 19:33:22

标签: qt qt5

这是包含一系列小部件的QFormLayout的屏幕截图。请注意,顶部和底部输入窗口小部件未与中间两行水平对齐。另请注意,左侧的标签未与中间的两行垂直对齐。

enter image description here

不同之处在于顶部和底部小部件是普通的QLineEdit和QTextEdit小部件,第二行是QWidget,QHBoxLayout包含QSpinBox和QDateTimeEdit,第三行是包含QWidget的QStackLayout,每个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提供的小部件保持一致。

我错过了什么?感谢。

1 个答案:

答案 0 :(得分:0)

你观察到的是多平台ui的斗争以及一些小部件非常糟糕的简单事实。鉴于时间有限且任务繁重,开发团队不会公平对待这些功能。强大的小部件和布局(如标准小部件QGridLayout)将在日夜保持无缺陷,而QStackedWidget等遗留小部件将被推送到维护队列的底部。

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

reproduction of op image

你能看到什么:

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

我的两分钱:

  1. 第二行的行为有所不同。因为我使用Qt4和你Qt5,我们都将QHBoxLayout边距设置为零,这意味着在Qt5或Linux实现中存在潜在的回归。 因此,这确认了您的疑虑
  2. QStackedWidget 可怕。它是通常的小部件,提供快速和基本的功能,而不是实现真正的交易。这里是一个QStackedLayout的小部件。就像我说的那样,我怀疑那些小工具在需要大量开发工作时会得到更少的爱。
  3. 在这些情况下,使用QGridLayout而不是QStackedLayout小部件布局的小部件。它将解决标签未对齐的问题。一开始很难设置,但结果通常很整洁。
  4. 顺便说一句,我切换到了一个带有stackedlayout的小部件,结果如下: same window with stacked layout