Qt 中的可调整大小 layouts/frames,每个小部件由用户

Resizable layouts/frames in Qt, per widget by the user

我经常使用QGridLayout,有一个需求我不知道如何实现,或者我是否可以用这种布局实现。

我的问题: 假设我有两个普通的小部件(从 QWidget 派生)在左右(在 QHBoxLayoutQGridLayout),我希望用户可以移动分隔它们的线。这可能吗?

更多信息: 举个例子,想象一下默认的 Windows 注册表编辑器。左边的部分是键和路径,右边的部分是要编辑的值。

我想强调一下,我并不是要浏览器视图。我基本上有一个绘图小部件在右边,一个 QTableView 小部件在左边,我希望用户能够方便地用他的鼠标缩放,哪个小部件应该水平更大。

是否有某种可以通过鼠标缩放的布局?

请索取您需要的更多信息。

谢谢!

我认为你应该使用 QSplitter

根据文档:

A splitter lets the user control the size of child widgets by dragging the boundary between the children. Any number of widgets may be controlled by a single splitter.

例如,使用 Qt Creator,如果我们有两个 QGridLayout,每个 QPushButton,我们可以 select 两个 QGridLayout 并使用 Lay Out Horizontally in Splitter选项。

之后,我们可以移动它们之间的边界来控制子部件的大小:

我举了个例子。这里有 ui 文件的代码:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>435</width>
    <height>105</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <widget class="QSplitter" name="splitter">
   <property name="geometry">
    <rect>
     <x>9</x>
     <y>10</y>
     <width>411</width>
     <height>71</height>
    </rect>
   </property>
   <property name="orientation">
    <enum>Qt::Horizontal</enum>
   </property>
   <widget class="QWidget" name="gridLayoutWidget">
    <layout class="QGridLayout" name="gridLayout">
     <item row="0" column="0">
      <widget class="QPushButton" name="pushButton">
       <property name="text">
        <string>PushButton</string>
       </property>
      </widget>
     </item>
    </layout>
   </widget>
   <widget class="QWidget" name="gridLayoutWidget_2">
    <layout class="QGridLayout" name="gridLayout_2">
     <item row="0" column="0">
      <widget class="QPushButton" name="pushButton_2">
       <property name="text">
        <string>PushButton</string>
       </property>
      </widget>
     </item>
    </layout>
   </widget>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>