QFormLayout не расширяет полную высоту виджета до максимальной высоты виджета

У меня проблема с получением полной высоты QTreewidget внутри QFormLayout. Я на Windows 10 и использую QT 5.7

Что я пробовал:

  • все возможные вертикальные политики безуспешны. Изменить
  • FieldGrowthPolicy макета на AllNonFixedFieldsGrow
  • Используйте другой виджет, все это не работает

Это все варианты, которые я нашел, чтобы сделать эту работу.

Вот чего я пытаюсь достичь: qtQformLayoutIssue.png

Вот мой файл пользовательского интерфейса:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>760</width>
    <height>747</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <layout class="QFormLayout" name="formLayout">
   <item row="0" column="0">
    <widget class="QLabel" name="label">
     <property name="text">
      <string>Please grow the treeview:</string>
     </property>
    </widget>
   </item>
   <item row="0" column="1">
    <widget class="QTreeWidget" name="treeWidget">
     <property name="sizePolicy">
      <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
       <horstretch>0</horstretch>
       <verstretch>0</verstretch>
      </sizepolicy>
     </property>
     <column>
      <property name="text">
       <string notr="true">1</string>
      </property>
     </column>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>

person Stormenet    schedule 18.01.2017    source источник


Ответы (1)


Пожалуйста, прочтите руководства по Qt о макетах. Я добавил два макета и разделитель в ваш файл пользовательского интерфейса.

виджеты с макетами

дерево

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>489</width>
    <height>215</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <layout class="QHBoxLayout" name="horizontalLayout_2">
   <item>
    <layout class="QHBoxLayout" name="horizontalLayout">
     <item>
      <layout class="QVBoxLayout" name="verticalLayout">
       <item>
        <widget class="QLabel" name="label">
         <property name="text">
          <string>Please grow the treeview:</string>
         </property>
        </widget>
       </item>
       <item>
        <spacer name="verticalSpacer">
         <property name="orientation">
          <enum>Qt::Vertical</enum>
         </property>
         <property name="sizeHint" stdset="0">
          <size>
           <width>20</width>
           <height>40</height>
          </size>
         </property>
        </spacer>
       </item>
      </layout>
     </item>
     <item>
      <widget class="QTreeWidget" name="treeWidget">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
       <column>
        <property name="text">
         <string notr="true">1</string>
        </property>
       </column>
      </widget>
     </item>
    </layout>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>
person znoopy2k    schedule 18.01.2017
comment
В основном, когда я хочу, чтобы что-то занимало все пространство с помощью QFormLayout, я не могу и должен использовать другой тип макета, такой как ваш пример или QGridLayout. Жаль, что это ограничение есть. - person Stormenet; 18.01.2017
comment
это решение не использует QFormLayout, что и запросил OP (у меня такая же проблема в моем коде) - person Jean-Michaël Celerier; 19.12.2018