我有点坚持认为它应该是一个简单的问题。
我有几个 QDockWidgets 的 QMainWindow。QDockWidget(我的代码中的_tree_dock)从 LeftDockWidgetArea 开始。它包含一个 QWidget (dockWidgetContents_2),其中包含一个 QTreeWidget (_tree_view)。我可以在运行时调整 QDockWidget 的大小/移动,没有任何问题,但是,当程序启动时,QDockWidget 有点太小了。
我可以将 QDockWidget 缩小很多,所以我知道它不是最小值(200)。它也可以做得更大,所以它也不是最大值。当我启动 Qt Designer 时,宽度始终为 258。
我在几个方法中输入了一些调试输出,看到宽度开始为 200。然后在调用 changeEvent(QEvent *) 时,宽度突然变为 258!
changeEvent() 输入:dock 的宽度为 200,其中事件为 105
changeEvent() 退出:dock 的宽度为 200,其中事件为 105
changeEvent() 输入:dock 的宽度为 258,其中事件为 99
changeEvent() 退出:dock 的宽度为 258,其中事件为 99
我把输出作为changeEvent的第一行和最后一行。根据文档,这些事件代码是:
QEvent::WindowStateChange 105 窗口的状态(最小化、最大化或全屏)已经改变(QWindowStateChangeEvent)。 QEvent::ActivationChange 99 小部件的顶级窗口激活状态已更改。
我猜大小在创建完成后会更新?我试过在 QDockWidget 和 QTreeView 上调用 resize 但它们似乎没有做任何事情。或者它们只是被调整为 258 所覆盖。
我几乎需要宽度为 265。默认情况下,树视图中的一列是半隐藏的。如果没有“简单”的方法来做到这一点,那么另一种方法就是让第一列稍微小一点。
下面是带有扩展坞的 ui 文件的片段。
<widget class="QDockWidget" name="_tree_dock">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Ignored">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>216</height>
</size>
</property>
<property name="features">
<set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set>
</property>
<property name="allowedAreas">
<set>Qt::AllDockWidgetAreas</set>
</property>
<property name="windowTitle">
<string>Objects</string>
</property>
<attribute name="dockWidgetArea">
<number>1</number>
</attribute>
<widget class="QWidget" name="dockWidgetContents_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Ignored">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
<layout class="QVBoxLayout" name="horizontalLayout_5">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>1</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>1</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<item>
<widget class="QTreeView" name="_tree_view">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Ignored">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="acceptDrops">
<bool>true</bool>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::DragDrop</enum>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="indentation">
<number>16</number>
</property>
<property name="rootIsDecorated">
<bool>true</bool>
</property>
<property name="uniformRowHeights">
<bool>true</bool>
</property>
<property name="animated">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</widget>