【问题标题】:Can't get a widget to grow properly when I resize the window调整窗口大小时,小部件无法正常增长
【发布时间】:2016-07-28 14:32:59
【问题描述】:

我制作了一个如下所示的表单:。 .ui 在下面。

右侧的 QTextEdit 是唯一将其水平大小策略设置为 Expanding 的小部件。所有其他小部件都是首选或最小。然而,当我水平调整窗口大小时,文本编辑是唯一增长的小部件。当所有其他小部件水平扩展时,它保持相同的大小。

我想我不明白这一切是如何运作的。调整窗口大小时如何使文本编辑展开?

.ui 文件

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWidget</class>
 <widget class="QWidget" name="MainWidget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>634</width>
    <height>303</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <layout class="QGridLayout" name="gridLayout">
   <item row="3" column="4" rowspan="7" colspan="2">
    <widget class="QTextEdit" name="textEdit">
     <property name="sizePolicy">
      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
       <horstretch>0</horstretch>
       <verstretch>0</verstretch>
      </sizepolicy>
     </property>
     <property name="minimumSize">
      <size>
       <width>300</width>
       <height>0</height>
      </size>
     </property>
     <property name="readOnly">
      <bool>true</bool>
     </property>
    </widget>
   </item>
   <item row="5" column="2">
    <widget class="QLabel" name="label_5">
     <property name="text">
      <string>Data written:</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     </property>
    </widget>
   </item>
   <item row="6" column="1">
    <widget class="QLabel" name="readSpeedLabel">
     <property name="frameShape">
      <enum>QFrame::StyledPanel</enum>
     </property>
     <property name="frameShadow">
      <enum>QFrame::Sunken</enum>
     </property>
     <property name="text">
      <string>TextLabel</string>
     </property>
    </widget>
   </item>
   <item row="5" column="0">
    <widget class="QLabel" name="label_3">
     <property name="text">
      <string>Write speed:</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     </property>
    </widget>
   </item>
   <item row="4" column="0">
    <widget class="QLabel" name="label_2">
     <property name="text">
      <string>Test Mode:</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     </property>
    </widget>
   </item>
   <item row="5" column="3">
    <widget class="QLabel" name="dataWrittenLabel">
     <property name="frameShape">
      <enum>QFrame::StyledPanel</enum>
     </property>
     <property name="frameShadow">
      <enum>QFrame::Sunken</enum>
     </property>
     <property name="text">
      <string>TextLabel</string>
     </property>
    </widget>
   </item>
   <item row="6" column="0">
    <widget class="QLabel" name="label_7">
     <property name="text">
      <string>Read speed:</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     </property>
    </widget>
   </item>
   <item row="4" column="1" colspan="3">
    <widget class="QPushButton" name="testModePushButton">
     <property name="text">
      <string>Select testing mode</string>
     </property>
    </widget>
   </item>
   <item row="9" column="2" colspan="2">
    <widget class="QPushButton" name="startStopButton">
     <property name="enabled">
      <bool>false</bool>
     </property>
     <property name="text">
      <string>Start test</string>
     </property>
    </widget>
   </item>
   <item row="3" column="1" colspan="3">
    <widget class="QPushButton" name="devicePushButton">
     <property name="text">
      <string>Select device</string>
     </property>
    </widget>
   </item>
   <item row="7" column="3">
    <widget class="QLabel" name="ETALabel">
     <property name="frameShape">
      <enum>QFrame::StyledPanel</enum>
     </property>
     <property name="frameShadow">
      <enum>QFrame::Sunken</enum>
     </property>
     <property name="text">
      <string>TextLabel</string>
     </property>
    </widget>
   </item>
   <item row="5" column="1">
    <widget class="QLabel" name="writeSpeedLabel">
     <property name="frameShape">
      <enum>QFrame::StyledPanel</enum>
     </property>
     <property name="frameShadow">
      <enum>QFrame::Sunken</enum>
     </property>
     <property name="text">
      <string>TextLabel</string>
     </property>
    </widget>
   </item>
   <item row="7" column="2">
    <widget class="QLabel" name="label_11">
     <property name="text">
      <string>ETA:</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     </property>
    </widget>
   </item>
   <item row="6" column="3">
    <widget class="QLabel" name="dataReadLabel">
     <property name="frameShape">
      <enum>QFrame::StyledPanel</enum>
     </property>
     <property name="frameShadow">
      <enum>QFrame::Sunken</enum>
     </property>
     <property name="text">
      <string>TextLabel</string>
     </property>
    </widget>
   </item>
   <item row="6" column="2">
    <widget class="QLabel" name="label_9">
     <property name="text">
      <string>Data Read:</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     </property>
    </widget>
   </item>
   <item row="8" column="0" colspan="4">
    <spacer name="verticalSpacer">
     <property name="orientation">
      <enum>Qt::Vertical</enum>
     </property>
     <property name="sizeHint" stdset="0">
      <size>
       <width>20</width>
       <height>40</height>
      </size>
     </property>
    </spacer>
   </item>
   <item row="3" column="0">
    <widget class="QLabel" name="label">
     <property name="text">
      <string>Device:</string>
     </property>
     <property name="alignment">
      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>

【问题讨论】:

    标签: qt


    【解决方案1】:

    QLabel 项目弄乱了你的布局。

    将每个QLabel 的水平大小策略设置为Fixed,这样就可以了。


    现在我不知道为什么 QLabels 和 Preferred 的增长速度比 QTextEditExpanding 政策的增长速度快。尤其是把Preferred改成Fix就解决了问题。

    Qt 文档说明:

    QSizePolicy::Expanding 小部件可以利用额外空间,因此它应该获得尽可能多的空间。

    QSizePolicy::Preferred 小部件可以展开,但比 sizeHint() 大没有任何优势。

    QSizePolicy::Fixed QWidget::sizeHint() 是唯一可接受的替代方案,因此小部件永远不会增长或缩小。

    看这个,当一个带有Preferred 的小部件靠近另一个带有Expanding 的小部件时,它似乎不会比sizeHint() 大。但是在您的情况下,标签的行为就像它们优先于文本编辑一样。 请注意,QPushButton 似乎并非如此。

    对我来说它看起来像一个错误。

    【讨论】:

    • 感谢您的回答。我刚刚再次重做布局,这次它成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2020-01-26
    • 2018-03-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    相关资源
    最近更新 更多