【问题标题】:QstackedWidget adding space for arrows when arranged verticallyQstackedWidget 在垂直排列时为箭头添加空间
【发布时间】:2013-03-07 04:27:02
【问题描述】:

我有一个 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>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>

我希望组框显示在整个窗口中(组框文本就在菜单下方。当我在应用程序中构建它并在 qt 设计器预览中查看时,它会在箭头的顶部留下一个空间top_pages 的位置。如何使组框延伸到这个空间?我可以打破布局并将其延伸到这个空间,但我认为这需要对stackedWidget_2 的每个页面都执行此操作。

【问题讨论】:

    标签: qt qt-designer


    【解决方案1】:

    这会产生您想要实现的布局吗?

    <?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>
    

    我所做的只是遍历所有小部件,并通过在对象编辑器中选择它们(centralWidgetpagepage_3page_4)并修改它们的布局属性,将它们的布局的上边距减少到 0在属性编辑器中。不需要破坏布局。

    【讨论】:

    • 这正是我想要的。谢谢。
    【解决方案2】:
    <?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>676</width>
        <height>595</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="title">
           <string>GroupBox</string>
          </property>
          <layout class="QVBoxLayout" name="verticalLayout">
           <item>
            <widget class="QLabel" name="label">
             <property name="frameShape">
              <enum>QFrame::NoFrame</enum>
             </property>
             <property name="text">
              <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
    &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
    p, li { white-space: pre-wrap; }
    &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
    &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Some text &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
             </property>
            </widget>
           </item>
           <item>
            <widget class="QStackedWidget" name="top_pages">
             <property name="frameShape">
              <enum>QFrame::Panel</enum>
             </property>
             <property name="currentIndex">
              <number>1</number>
             </property>
             <widget class="QFrame" name="page">
              <layout class="QVBoxLayout" name="verticalLayout_2"/>
             </widget>
             <widget class="QFrame" name="page_2"/>
            </widget>
           </item>
          </layout>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QMenuBar" name="menubar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>676</width>
         <height>18</height>
        </rect>
       </property>
      </widget>
     </widget>
     <resources/>
     <connections/>
    </ui>
    

    我认为这就是你想要创造的。有几个堆栈小部件。我做了一个。只是为了表明我在堆叠的小部件周围添加了框框。它可以很容易地从属性中删除

    【讨论】:

    • 感谢您的想法,我认为这只是将问题转移到了 groupbox 内部。这是问题的一个最小示例,在实际版本中,我在组框中垂直排列了按钮,所以我认为这只是使空间出现在组框内。我希望有办法让 groupbox 展开。
    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多