【问题标题】:QTabWidget refusing to auto-resizeQTabWidget 拒绝自动调整大小
【发布时间】:2011-09-07 11:18:38
【问题描述】:

我正在尝试在 qtcreator 中使用以下布局:

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

每个具有sizePolicy 的控件都设置为Expanding。尽管如此,标签小部件和我放在该页面小部件上的任何其他内容都不会自动调整大小。

我是 Qt 的新手,如果这是一个明显的修复,请原谅我。谢谢。

【问题讨论】:

    标签: c++ qt layout qtabwidget


    【解决方案1】:

    这是重复的吗 How to make a Qt Widget grow with the window size??

    我认为它是重复的,因为如果你的小部件树中的每个项目都有一个布局,我在 Qt 4.7 上的测试给出了以下输出,右侧是我的对象检查器。 我只是放入小部件并对其进行布局,我没有将任何大小的东西更改为扩展,因为这绝对没有必要!

    左边是运行的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>
    

    【讨论】:

    • 您的页面小部件图标看起来与我的不同,这似乎很可疑。你的似乎有网格布局图标,而我的似乎有一个红色 (/) 符号。这是否意味着我的页面没有布局?如何将布局应用到我的页面?
    • 这毕竟是问题所在。我终于想出了如何将布局应用到页面小部件。
    • 只是为了回答上一条之前的评论:红叉图标确实意味着:NO LAYOUT!如果在小部件的层次结构中没有布局,则自动调整大小会被破坏!
    【解决方案2】:

    您需要以下层次结构,请注意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) ;
    

    【讨论】:

    • 即使我在标签小部件和页面小部件之间添加布局,它也不起作用。选项卡小部件会根据其布局调整大小,但布局不会根据页面调整大小。
    • @kidneyofnothing:难以置信!你怎么知道的?
    【解决方案3】:

    我在设计器中创建了一个新的顶级窗口(QWidget)并在其上放置了两个堆叠的小部件,按住 ctrl 并单击它们以选择它们,然后右键单击它们并选择“在拆分器中水平布局”。然后我右键单击顶级 QWidget 并选择“网格中的布局”。在此之后,两个堆叠的小部件展开以填充可用空间,并且它们随着顶层窗口适当地增长和收缩。也许您只需要为顶级小部件设置布局?

    【讨论】:

    • 两个堆叠的小部件已经正常展开。它是堆叠小部件内部(堆叠页面内部)上的控件,不会调整大小。
    猜你喜欢
    • 2013-01-19
    • 1970-01-01
    • 2014-01-23
    • 2016-10-07
    • 1970-01-01
    • 2021-11-25
    • 2018-02-06
    • 2015-03-13
    • 2013-12-16
    相关资源
    最近更新 更多