繁体   English   中英

如何减少Qt中布局内的小部件之间的间隙

[英]How to reduce the gap between widgets inside a layout in Qt

我在运行时创建了VerticalLayout,并在其上添加了几个复选框。 但是该复选框在表单顶部具有巨大的白色空间。 我无法缩小它们之间的距离,并无法修剪顶部的多余空白。

下面是ui和cpp文件的源代码:

HideChartConfig.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>HideChartConfig</class>
 <widget class="QDialog" name="HideChartConfig">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>559</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string></string>
  </property>
  <widget class="QScrollArea" name="scrollArea">
   <property name="geometry">
    <rect>
     <x>10</x>
     <y>10</y>
     <width>381</width>
     <height>471</height>
    </rect>
   </property>
   <property name="widgetResizable">
    <bool>true</bool>
   </property>
   <widget class="QWidget" name="scrollAreaWidgetContents">
    <property name="geometry">
     <rect>
      <x>0</x>
      <y>0</y>
      <width>379</width>
      <height>469</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QPushButton" name="okButton">
   <property name="geometry">
    <rect>
     <x>310</x>
     <y>510</y>
     <width>75</width>
     <height>23</height>
    </rect>
   </property>
   <property name="text">
    <string>OK</string>
   </property>
  </widget>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

在HideChartConfig的构造函数中:

this->setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
    ui->setupUi(this);
    QPalette pal = ui->scrollArea->palette();
    pal.setColor(QPalette::Background, Qt::white);
    ui->scrollArea->setPalette(pal);

    QWidget* container = new QWidget();
    m_ContainerLayout = new QVBoxLayout();
    container->setLayout(m_ContainerLayout);
    ui->scrollArea->setWidget(container);

    m_ContainerLayout->addStretch();

    for (int i = 0; i < 3; i++)
    {
        QCheckBox *checkbox = new QCheckBox("Hello");
        m_ContainerLayout->addWidget(checkbox, 0, Qt::AlignTop);
    }


    m_ContainerLayout->addStretch();
    m_ContainerLayout->setSpacing(0);

还附有屏幕截图以供参考:

点击此处查看屏幕截图

我希望复选框显示在表单顶部,并修剪顶部的多余空白。

任何帮助表示赞赏。 提前致谢!

您应该在布局容器的底部添加一个垂直QSpacerItem ,并将其设置为Expanding ,这将在布局底部使用尽可能多的空间,将其上方的所有内容推到顶部。

尝试删除第一行

m_ContainerLayout->addStretch();

它在顶部提供了空间。 (第二行给出了底部的空间。)

您不必创建新的QWidget ,必须使用scrollAreaWidgetContents小部件并将其作为具有最小高度的大小策略放置。 另外,您必须添加垫片,以便正确放置它:

setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
ui->setupUi(this);
QPalette pal = ui->scrollArea->palette();
pal.setColor(QPalette::Background, Qt::white);
ui->scrollArea->setPalette(pal);

m_ContainerLayout = new QVBoxLayout(ui->scrollAreaWidgetContents);
ui->scrollArea->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum);

for (int i = 0; i < 3; i++)
{
    QCheckBox *checkbox = new QCheckBox("Hello");
    m_ContainerLayout->addWidget(checkbox);
}

* .ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>HideChartConfig</class>
 <widget class="QDialog" name="HideChartConfig">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>559</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string/>
  </property>
  <layout class="QVBoxLayout" name="verticalLayout">
   <item>
    <widget class="QScrollArea" name="scrollArea">
     <property name="widgetResizable">
      <bool>true</bool>
     </property>
     <widget class="QWidget" name="scrollAreaWidgetContents">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>380</width>
        <height>249</height>
       </rect>
      </property>
     </widget>
    </widget>
   </item>
   <item>
    <spacer name="verticalSpacer">
     <property name="orientation">
      <enum>Qt::Vertical</enum>
     </property>
     <property name="sizeHint" stdset="0">
      <size>
       <width>20</width>
       <height>248</height>
      </size>
     </property>
    </spacer>
   </item>
   <item>
    <layout class="QHBoxLayout" name="horizontalLayout">
     <item>
      <spacer name="horizontalSpacer">
       <property name="orientation">
        <enum>Qt::Horizontal</enum>
       </property>
       <property name="sizeHint" stdset="0">
        <size>
         <width>40</width>
         <height>20</height>
        </size>
       </property>
      </spacer>
     </item>
     <item>
      <widget class="QPushButton" name="okButton">
       <property name="text">
        <string>OK</string>
       </property>
      </widget>
     </item>
    </layout>
   </item>
  </layout>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

屏幕截图:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM