如何减少 Qt 布局内小部件之间的差距
How to reduce the gap between widgets inside a layout in Qt
我在 运行 时间内创建了一个 VerticalLayout 并在其上添加了几个复选框。但是复选框在表单顶部有巨大的白色space。我无法缩小它们与 trim 顶部额外的白色 space 之间的差距。
下面是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);
另附上截图供参考:
我希望复选框显示在表单顶部,trim 额外的白色 space 在顶部。
感谢任何帮助。提前致谢!
您应该在布局容器的底部添加一个垂直 QSpacerItem
,并将其设置为 Expanding
,这将在您的布局容器底部使用尽可能多的 space布局,将其上方的所有内容推到顶部。
尝试删除第一行
m_ContainerLayout->addStretch();
它给出了 space 在上面。 (第二行在底部给出 space。)
您不必创建新的 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>
截图:
我在 运行 时间内创建了一个 VerticalLayout 并在其上添加了几个复选框。但是复选框在表单顶部有巨大的白色space。我无法缩小它们与 trim 顶部额外的白色 space 之间的差距。
下面是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);
另附上截图供参考:
我希望复选框显示在表单顶部,trim 额外的白色 space 在顶部。
感谢任何帮助。提前致谢!
您应该在布局容器的底部添加一个垂直 QSpacerItem
,并将其设置为 Expanding
,这将在您的布局容器底部使用尽可能多的 space布局,将其上方的所有内容推到顶部。
尝试删除第一行
m_ContainerLayout->addStretch();
它给出了 space 在上面。 (第二行在底部给出 space。)
您不必创建新的 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>
截图: