在QT Designer中将框架集中在另一个框架中

时间:2015-12-07 16:54:19

标签: qt pyqt

在第一张照片中,我设计了一个原型。 MainWindow包含小部件和三个框架。中心框架有另一个框架,当我在全屏幕中运行应用程序时,中心框架中存在尺寸问题,如第二张图片所示。我想将框架置于其框架中心。我怎么能这样做?

first picture second picture

1 个答案:

答案 0 :(得分:0)

您可以从Qt Designer轻松完成。只需将另一个水平布局添加到中间框架即可。然后将小部件添加到布局中,转到对象管理器,在小部件上调用上下文菜单,单击布局对齐并选择水平居中

以下是我刚刚创建的.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>965</width>
    <height>502</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <layout class="QHBoxLayout" name="horizontalLayout">
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout_3">
      <item>
       <widget class="QFrame" name="frame_2">
        <property name="frameShape">
         <enum>QFrame::StyledPanel</enum>
        </property>
        <property name="frameShadow">
         <enum>QFrame::Raised</enum>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QFrame" name="frame_3">
        <property name="frameShape">
         <enum>QFrame::StyledPanel</enum>
        </property>
        <property name="frameShadow">
         <enum>QFrame::Raised</enum>
        </property>
        <widget class="QWidget" name="horizontalLayoutWidget_2">
         <property name="geometry">
          <rect>
           <x>9</x>
           <y>9</y>
           <width>291</width>
           <height>411</height>
          </rect>
         </property>
         <layout class="QHBoxLayout" name="horizontalLayout_2">
          <item alignment="Qt::AlignHCenter|Qt::AlignVCenter">
           <widget class="QListWidget" name="listWidget"/>
          </item>
         </layout>
        </widget>
       </widget>
      </item>
      <item>
       <widget class="QFrame" name="frame">
        <property name="frameShape">
         <enum>QFrame::StyledPanel</enum>
        </property>
        <property name="frameShadow">
         <enum>QFrame::Raised</enum>
        </property>
       </widget>
      </item>
     </layout>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>965</width>
     <height>23</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>

版本1:基本上,通过上面的示例,我设法重现了您的错误。我在中间框架内添加了水平布局,但在更改尺寸时,中间窗口小部件已对齐到左侧。

您的问题的答案如下:Make QHorizontalLayout expand inside QFrame

您必须将水平布局添加到中间框架中。然后你必须调用中间框架的上下文菜单,单击布局 - &gt;水平布局。在布局中添加小部件。最有可能的是,widget会将其宽度扩展到主窗口的宽度。将SizePolicy更改为固定。此时你的问题应该解决了。