如何将 "stick" 小部件置于扩展 window 的底部?

How to "stick" widgets to bottom of an expanding window?

我有一堆标准的 qt creator 拖拽控件,它们位于 window 的底部。我有一个 table 小部件,如果 window 向下扩展,我想垂直扩展它以显示更多行,如果向上扩展到最小,则显示更少。当边缘移动时,我希望所有其他小部件都粘在 window 的底部。我正在使用 Qt Creator 2.1.0 和 Qt 4.7,我没有看到任何可以满足我需要的小部件的标志,谷歌搜索也没有真正发现任何有启发性的东西。也许它与将小部件放在移动 and/or 延伸的容器中有关?现在,它们就在 MainWindow 上。

很难从你的问题中知道你想做什么,但也许你正在寻找 QSplitter

或者,您可以指定各种 QLayouts for a QWidget, such as QHBoxLayout, QVBoxLayout, QGridLayout,等等。可以将各种小部件添加到您指定的布局中,然后您在 QWidget 上设置布局,因此它充当您的小部件的容器已添加到布局中。可以在将小部件添加到布局时设置拉伸和对齐标志。

A​​ QMainWindow 只应在您需要其对接功能时使用。否则,只需使用普通的 QWidget。没有通用的子部件可以 "stuck" 到 QMainWindow 上。他们需要属于中央小部件。您最有可能需要做的就是为 table 小部件设置 Expanding 垂直尺寸策略。默认情况下,设计师应该这样做。这是一个例子:

mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QTableWidget" name="table">
      <row>
       <property name="text">
        <string>1</string>
       </property>
      </row>
      <column>
       <property name="text">
        <string>Name</string>
       </property>
      </column>
      <item row="0" column="0">
       <property name="text">
        <string>fyngyrz</string>
       </property>
      </item>
     </widget>
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
       <widget class="QPushButton" name="foo">
        <property name="text">
         <string>Foo</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QPushButton" name="bar">
        <property name="text">
         <string>Bar</string>
        </property>
       </widget>
      </item>
     </layout>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

只需设置一个垂直布局,向其添加一个分隔符,然后添加您的小部件。垫片会将您的小部件一直向下推。此外,您可能想尝试一下尺寸政策。