Search code examples
qtqt-designer

QstackedWidget adding space for arrows when arranged vertically


I have a ui file, like this:

<?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>377</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QStackedWidget" name="top_pages">
      <property name="currentIndex">
       <number>0</number>
      </property>
      <widget class="QFrame" name="page">
       <layout class="QVBoxLayout" name="verticalLayout_2">
        <item>
         <widget class="QStackedWidget" name="stackedWidget_2">
          <property name="currentIndex">
           <number>1</number>
          </property>
          <widget class="QWidget" name="page_3">
           <layout class="QVBoxLayout" name="verticalLayout_3">
            <item>
             <widget class="QGroupBox" name="groupBox">
              <property name="title">
               <string>GroupBox</string>
              </property>
              <property name="alignment">
               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
              </property>
              <layout class="QVBoxLayout" name="verticalLayout_4"/>
             </widget>
            </item>
           </layout>
          </widget>
          <widget class="QWidget" name="page_4">
           <layout class="QVBoxLayout" name="verticalLayout_5">
            <item>
             <widget class="QGroupBox" name="groupBox_2">
              <property name="sizePolicy">
               <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
                <horstretch>0</horstretch>
                <verstretch>0</verstretch>
               </sizepolicy>
              </property>
              <property name="title">
               <string>GroupBox</string>
              </property>
              <layout class="QVBoxLayout" name="verticalLayout_6"/>
             </widget>
            </item>
           </layout>
          </widget>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QFrame" name="page_2"/>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>377</width>
     <height>19</height>
    </rect>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

I want the groupboxes to be shown in the whole window( the groupbox text to be just below the menus. When I build this in an application and look at in the qt designer preview it leaves a space at the top where the arrows of top_pages are located. How would I make the group box extend into this space? I can break the layout and extend it into this space but I think this would require doing this for every page of stackedWidget_2.


Solution

  • Does this produce the layout you're trying to achieve?

    <?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>377</width>
        <height>600</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <layout class="QVBoxLayout" name="verticalLayout">
        <property name="topMargin">
         <number>0</number>
        </property>
        <item>
         <widget class="QStackedWidget" name="top_pages">
          <property name="currentIndex">
           <number>0</number>
          </property>
          <widget class="QFrame" name="page">
           <layout class="QVBoxLayout" name="verticalLayout_2">
            <property name="topMargin">
             <number>0</number>
            </property>
            <item>
             <widget class="QStackedWidget" name="stackedWidget_2">
              <property name="currentIndex">
               <number>1</number>
              </property>
              <widget class="QWidget" name="page_3">
               <layout class="QVBoxLayout" name="verticalLayout_3">
                <property name="topMargin">
                 <number>0</number>
                </property>
                <item>
                 <widget class="QGroupBox" name="groupBox">
                  <property name="title">
                   <string>GroupBox</string>
                  </property>
                  <property name="alignment">
                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
                  </property>
                  <layout class="QVBoxLayout" name="verticalLayout_4"/>
                 </widget>
                </item>
               </layout>
              </widget>
              <widget class="QWidget" name="page_4">
               <layout class="QVBoxLayout" name="verticalLayout_5">
                <item>
                 <widget class="QGroupBox" name="groupBox_2">
                  <property name="sizePolicy">
                   <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
                    <horstretch>0</horstretch>
                    <verstretch>0</verstretch>
                   </sizepolicy>
                  </property>
                  <property name="title">
                   <string>GroupBox</string>
                  </property>
                  <layout class="QVBoxLayout" name="verticalLayout_6">
                   <property name="topMargin">
                    <number>0</number>
                   </property>
                  </layout>
                 </widget>
                </item>
               </layout>
              </widget>
             </widget>
            </item>
           </layout>
          </widget>
          <widget class="QFrame" name="page_2"/>
         </widget>
        </item>
       </layout>
      </widget><?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>377</width>
        <height>600</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <layout class="QVBoxLayout" name="verticalLayout">
        <property name="topMargin">
         <number>0</number>
        </property>
        <item>
         <widget class="QStackedWidget" name="top_pages">
          <property name="currentIndex">
           <number>0</number>
          </property>
          <widget class="QFrame" name="page">
           <layout class="QVBoxLayout" name="verticalLayout_2">
            <property name="topMargin">
             <number>0</number>
            </property>
            <item>
             <widget class="QStackedWidget" name="stackedWidget_2">
              <property name="currentIndex">
               <number>1</number>
              </property>
              <widget class="QWidget" name="page_3">
               <layout class="QVBoxLayout" name="verticalLayout_3">
                <property name="topMargin">
                 <number>0</number>
                </property>
                <item>
                 <widget class="QGroupBox" name="groupBox">
                  <property name="title">
                   <string>GroupBox</string>
                  </property>
                  <property name="alignment">
                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
                  </property>
                  <layout class="QVBoxLayout" name="verticalLayout_4"/>
                 </widget>
                </item>
               </layout>
              </widget>
              <widget class="QWidget" name="page_4">
               <layout class="QVBoxLayout" name="verticalLayout_5">
                <item>
                 <widget class="QGroupBox" name="groupBox_2">
                  <property name="sizePolicy">
                   <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
                    <horstretch>0</horstretch>
                    <verstretch>0</verstretch>
                   </sizepolicy>
                  </property>
                  <property name="title">
                   <string>GroupBox</string>
                  </property>
                  <layout class="QVBoxLayout" name="verticalLayout_6">
                   <property name="topMargin">
                    <number>0</number>
                   </property>
                  </layout>
                 </widget>
                </item>
               </layout>
              </widget>
             </widget>
            </item>
           </layout>
          </widget>
          <widget class="QFrame" name="page_2"/>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QMenuBar" name="menubar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>377</width>
         <height>23</height>
        </rect>
       </property>
      </widget>
     </widget>
     <resources/>
     <connections/>
    </ui>
      <widget class="QMenuBar" name="menubar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>377</width>
         <height>23</height>
        </rect>
       </property>
      </widget>
     </widget>
     <resources/>
     <connections/>
    </ui>
    

    All I did was go through all of widgets and reduced their layout's top margin to 0 by selecting them in the object editor (centralWidget, page, page_3, page_4), and modifying their layout properties in the property editor. No layout breaking needed.