qt - 为什么自定义 QWidgets 而不是内置的 QWidgets 具有非零边距?

标签 qt qt5

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

enter image description here

不同之处在于顶部和底部小部件是普通的 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 ):

reproduction of op image

你可以看到:

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

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

  • 顺便说一句,我切换到一个带有stackedlayout的小部件,结果如下:
    same window with stacked layout

    关于qt - 为什么自定义 QWidgets 而不是内置的 QWidgets 具有非零边距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32318632/

    相关文章:

    python - 如何知道用户何时完成调整窗口大小?

    c++ - 从源代码构建 Qt 时,我可以制作或指定哪些部分?

    c++ - 使用 QStyledItemDelegate 时 QPushButton 的绘制方法面临问题

    qt - QLowEnergyService 永远不会在自定义蓝牙服务上转换到 ServiceDiscovered 状态

    mysql - 使用 Qt 连接数据库 : Failed?

    linux - 如何使用 Qt 4 创建 OpenGL 3 上下文?

    c++ - 如何在多线程中使用模板类型作为槽和信号参数?

    c++ - QListView 模型用户界面

    qt - 在windows上部署Qt5应用程序的问题

    c++ - QTimer::singleShot 仅在间隔为 0 时调用 lambda