QTabWidget отказывается от автоматического изменения размера - PullRequest
3 голосов
/ 03 июня 2011

Я пытаюсь получить следующую раскладку в qtcreator:

QWidget
  QSplitter
    QStackedWidget
      ...
    QStackedWidget
      QWidget (page)
        QTabWidget

Каждый отдельный элемент управления, имеющий sizePolicy, устанавливается на Expanding. Несмотря на это, ни виджет вкладки, ни что-либо еще, что я перетаскиваю на этот виджет страницы, не меняются автоматически.

Я новичок в Qt, так что простите, если это очевидное исправление. Спасибо.

Ответы [ 3 ]

3 голосов
/ 03 июня 2011

Это дубликат Как заставить Qt Widget расти с размером окна? ?

Я думаю, что это дубликат, потому что, если каждый элемент в вашем дереве виджетов имеет компоновку, мой тест на Qt 4.7 дал следующий вывод, с правой стороны - мой инспектор объектов. Я просто вставил виджеты и расположил их, я не изменил размер, чтобы расширить, так как это абсолютно не нужно!

Image with exe and creator screenshot

Слева - запущенный exe, справа - скриншот Creator. А вот и мой интерфейс:

    <?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>545</width>
    <height>441</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <layout class="QHBoxLayout" name="horizontalLayout">
    <item>
     <widget class="QSplitter" name="splitter">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
      <widget class="QStackedWidget" name="stackedWidget">
       <property name="currentIndex">
        <number>0</number>
       </property>
       <widget class="QWidget" name="page_1_1">
        <property name="layoutDirection">
         <enum>Qt::LeftToRight</enum>
        </property>
        <layout class="QGridLayout" name="gridLayout_2">
         <item row="0" column="0">
          <widget class="QTabWidget" name="tabWidget_1">
           <property name="currentIndex">
            <number>0</number>
           </property>
           <widget class="QWidget" name="tab_3">
            <attribute name="title">
             <string>Tab 1</string>
            </attribute>
            <layout class="QGridLayout" name="gridLayout_4">
             <item row="0" column="0">
              <widget class="QDateTimeEdit" name="dateTimeEdit_2"/>
             </item>
             <item row="1" column="0">
              <widget class="QDateTimeEdit" name="dateTimeEdit"/>
             </item>
            </layout>
           </widget>
           <widget class="QWidget" name="tab_4">
            <attribute name="title">
             <string>Tab 2</string>
            </attribute>
            <layout class="QGridLayout" name="gridLayout_5">
             <item row="0" column="0">
              <widget class="QCheckBox" name="checkBox_2">
               <property name="text">
                <string>CheckBox</string>
               </property>
              </widget>
             </item>
             <item row="1" column="0">
              <widget class="QCheckBox" name="checkBox">
               <property name="text">
                <string>CheckBox</string>
               </property>
              </widget>
             </item>
            </layout>
           </widget>
          </widget>
         </item>
        </layout>
       </widget>
      </widget>
      <widget class="QStackedWidget" name="stackedWidget_2">
       <widget class="QWidget" name="page_2_1">
        <layout class="QGridLayout" name="gridLayout_3">
         <item row="0" column="0">
          <widget class="QTabWidget" name="tabWidget_2">
           <widget class="QWidget" name="tab">
            <attribute name="title">
             <string>Tab 1</string>
            </attribute>
            <layout class="QGridLayout" name="gridLayout">
             <item row="0" column="0">
              <widget class="QDateEdit" name="dateEdit"/>
             </item>
             <item row="1" column="0">
              <widget class="QDateEdit" name="dateEdit_2"/>
             </item>
            </layout>
           </widget>
           <widget class="QWidget" name="tab_2">
            <attribute name="title">
             <string>Tab 2</string>
            </attribute>
            <layout class="QGridLayout" name="gridLayout_6">
             <item row="0" column="0">
              <widget class="QCheckBox" name="checkBox_4">
               <property name="text">
                <string>CheckBox</string>
               </property>
              </widget>
             </item>
             <item row="1" column="0">
              <widget class="QCheckBox" name="checkBox_3">
               <property name="text">
                <string>CheckBox</string>
               </property>
              </widget>
             </item>
            </layout>
           </widget>
          </widget>
         </item>
        </layout>
       </widget>
      </widget>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>545</width>
     <height>22</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>
2 голосов
/ 03 июня 2011

Вам нужна следующая иерархия, отметьте QLayout):

QWidget
  QSplitter
    QStackedWidget
      ...
    QStackedWidget
      QWidget (page)
        QLayout
          QTabWidget

Итак, код выглядит примерно так:

QLayout* MyLayout = new QVBoxLayout (MyPageWidget) ;
MyLayout -> setSpacing (0) ;
MyLayout -> setContentsMargins (0, 0, 0, 0) ;
MyLayout -> addWidget (MyTabWidget) ;
1 голос
/ 03 июня 2011

Я создал новое окно верхнего уровня (QWidget) в конструкторе и поместил на него два сложенных виджета, щелкнув по ним левой кнопкой мыши, удерживая клавишу CTRL, чтобы выбрать их, а затем щелкнув правой кнопкой мыши и выбрав «Макет по горизонтали в Splitter».Затем я щелкнул правой кнопкой мыши на верхнем уровне QWidget и выбрал «Макет в сетке».После этого два сложенных виджета расширяются, чтобы заполнить доступное пространство, и они правильно растут и уменьшаются вместе с окном верхнего уровня.Возможно, вам просто нужно установить макет для виджета верхнего уровня?

...