Как предотвратить уменьшение виджета после установки макета для его родителя? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть QGroupBox и QTabWidget бок о бок внутри centralwidget, и я хочу, чтобы QGroupBox имел фиксированную ширину и высоту расширения, а QTabWidget имел ширину и высоту.

Проблема возникает, когда я устанавливаю горизонтальное расположение к центральному виджету. Все расширяется нормально, но мой QGroupBox уменьшается в ширину.

Как предотвратить это сокращение при сохранении расширяемости виджетов?

Before

After

Пример этого с минимальным .ui файлом:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>640</width>
    <height>313</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QHBoxLayout" name="horizontalLayout">
    <item>
     <widget class="QGroupBox" name="groupBox">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="title">
       <string>GroupBox</string>
      </property>
      <widget class="QLabel" name="label">
       <property name="geometry">
        <rect>
         <x>10</x>
         <y>140</y>
         <width>231</width>
         <height>16</height>
        </rect>
       </property>
       <property name="text">
        <string>This text is supposed to be visible in its entirety.</string>
       </property>
      </widget>
     </widget>
    </item>
    <item>
     <widget class="QTabWidget" name="tabWidget">
      <widget class="QWidget" name="tab">
       <attribute name="title">
        <string>Tab 1</string>
       </attribute>
      </widget>
      <widget class="QWidget" name="tab_2">
       <attribute name="title">
        <string>Tab 2</string>
       </attribute>
      </widget>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>640</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

1 Ответ

0 голосов
/ 13 марта 2020

Добавление виджета к родителю недостаточно для того, чтобы родительский размер изменил себя настолько, чтобы дочерний элемент стал полностью видимым. Диспетчер компоновки не только гарантирует, что все виджеты правильно изменены, но также и виджет, для которого установлен макет, знает, требуется ли им больше (или меньше) места, чем он фактически предоставляет.

Сейчас вы не У него нет никакого макета, установленного для левой группы, поэтому каждый из дочерних элементов группы «свободен», и его можно теоретически переместить и изменить размер, несмотря ни на что. В то же время размер группового блока может быть изменен при необходимости, поскольку он не имеет никаких ограничений: в основном макете главного окна у вас также есть QTabWidget (это виджет, который автоматически пытается расширить до максимально доступного пространства ), и поскольку у группового блока нет никаких ограничений, в результате виджет вкладки будет занимать большую часть ширины, за исключением минимума, требуемого групповым блоком (его рамкой и его заголовком).

Кому решите вашу проблему, установите макет для группового блока, и он будет автоматически изменен для правильного отображения его содержимого: убедитесь, что хотя бы один виджет существует в групповом окне, щелкните правой кнопкой мыши пустую область блока и выберите один из менеджеров раскладки в подменю «Макет».

...