布局:如何在垂直布局中使一个小部件成为其余小部件的 3 倍

Posted

技术标签:

【中文标题】布局:如何在垂直布局中使一个小部件成为其余小部件的 3 倍【英文标题】:Layout : How to make one widget 3x the rest in a vertical layout 【发布时间】:2013-08-15 10:02:54 【问题描述】:

我有 3 个垂直布局的表(A、B 和 C)。这 3 个的大小策略(水平和垂直)设置为展开。我怎样才能使表 A 的大小是 B 和 C 的 3 倍,并且始终保持该比例。我正在通过 QT Designer 执行此操作。

更新:

为了测试布局拉伸方法。我在垂直布局中添加了四个 QlistWidgets 到具有水平布局的表单中。这是表单的 XML

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>formPracticeClass</class>
 <widget class="QMainWindow" name="formPracticeClass">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>847</width>
    <height>661</height>
   </rect>
  </property>
  <property name="sizePolicy">
   <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
    <horstretch>0</horstretch>
    <verstretch>0</verstretch>
   </sizepolicy>
  </property>
  <property name="windowTitle">
   <string>formPractice</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <layout class="QHBoxLayout" name="horizontalLayout">
    <item>
     <layout class="QVBoxLayout" name="verticalLayout_2" stretch="1,0,0,0">
      <item>
       <widget class="QListWidget" name="listWidget"/>
      </item>
      <item>
       <widget class="QListWidget" name="listWidget_3"/>
      </item>
      <item>
       <widget class="QListWidget" name="listWidget_2"/>
      </item>
      <item>
       <widget class="QListWidget" name="listWidget_4"/>
      </item>
     </layout>
    </item>
   </layout>
  </widget>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources>
  <include location="formpractice.qrc"/>
 </resources>
 <connections/>
</ui>

具有 4 个小部件的垂直布局具有 1,0,0,0 的拉伸布局。最上面的小部件的高度对其他人来说看起来更小。我希望最上面的小部件比其他小部件大 2 倍

【问题讨论】:

【参考方案1】:

在包含 3 个表格的布局上,在 Qt Designer 中将 layoutStretch 属性设置为 3,1,1。这指定布局中的第一个元素的空间应该是布局中其他两个元素的 3 倍。

更新:

对于您更新的示例 .ui 文件,您可以通过将 layoutStretch 设置为 2,1,1,1 来使最顶部的小部件比其他小部件大 2 倍:

     <layout class="QVBoxLayout" name="verticalLayout_2" stretch="2,1,1,1">

请注意,stretch 属性指定布局的不同元素之间的 比率。换句话说,如果您将layoutStretch 属性中的元素之一设置为0,您将不会得到想要的结果。

【讨论】:

但是这样 TableA 会增加,而 table b 和 c 保持相同的大小,并且在表格放大时它们不会扩展 @Rajeshwar 你试过了吗?它按预期工作,所有表都扩展了,包括 B 和 C。 是的,我做到了。布局约束设置为默认布局约束。对我来说,似乎 Table 设置为扩展,而 b 和 C 变得固定。 @Rajeshwar 我无法重现您的结果。您是否在表格或布局上设置其他属性? 我在另一个表单上尝试这个。稍后会发布结果,以确保我可能不会更改其他属性

以上是关于布局:如何在垂直布局中使一个小部件成为其余小部件的 3 倍的主要内容,如果未能解决你的问题,请参考以下文章

自定义 Qt 设计器小部件:包含自定义垂直布局的滚动区域

如何在堆栈中垂直或水平居中小部件?

Android垂直对齐文本和小部件

如何在 Qt 中制作可展开/可折叠的部分小部件

QBoxLayout 的所有者是不是成为所有布局小部件的所有者?

Flutter 布局相关知识点