【问题标题】:Space between widgets in QVBoxLayoutQVBoxLayout 中小部件之间的空间
【发布时间】:2013-05-15 18:22:42
【问题描述】:

我正在尝试使用 Qt5.0.1 制作登录表单。我创建了 2 个小部件,并将我的标签和行编辑放在其中一个中,并将我的按钮放在另一个中。然后我把这两个小部件放在一个 QVBoxLayout 中,但是布局中两个小部件之间的空间不仅仅是目的。我尝试了 setSpacing 和 setContentsMargin,但它们不适用于这个程序。

vhandle->setSpacing(0);
vhandle->setMargin(0);
vhandle->setContentsMargins(0,0,0,0);
vhandle->addWidget(handle,0, Qt::AlignTop);
vhandle->addWidget(handle2,0, Qt::AlignTop);

但两个小部件之间的空间没有任何变化:

我该怎么办?

【问题讨论】:

    标签: qt spacing


    【解决方案1】:

    问题不是QVboxLayout 的边距设置,而是容器小部件布局的边距设置和QVBoxLayout 的间距设置。您已经将间距设置为 0,这应该没问题。另外,假设upperWidgetLayout是上widget的布局,lowerWidgetLayout是下widget的布局,试试

    upperWidgetLayout->setContentsMargins(-1, -1, -1, 0);
    lowerWidgetLayout->setContentsMargin(-1, 0, -1, -1);
    

    这会将上部小部件布局的下边距和下部小部件布局的上边距设置为0,这样两个小部件的内容之间就没有空格:

    暂时为各种小部件着色通常是追踪此类问题的好方法。您还可以使用 Qt Designer 设计 UI 并查看正在生成的源代码(或直接在您的项目中使用 .ui 文件)。

    【讨论】:

      【解决方案2】:

      小部件或布局之间的多余空间可以通过在顶部设置对齐来移除,这里是一个示例:

      self.layout_scrollarea_v=QVBoxLayout(self.frame)
      self.layout_scrollarea_v.setAlignment(Qt.AlignTop)
      self.layout_scrollarea_v.addLayout(self.layout_scrollarea_h1)
      self.layout_scrollarea_v.addLayout(self.layout_scrollarea_h3)
      self.layout_scrollarea_v.addLayout(self.layout_scrollarea_h2)
      

      在您的代码中使用

      vhandle->setAlignment(Qt::AlignTop)
      

      【讨论】: