Qt 中可调整大小的布局/框架,由用户为每个小部件

The*_*ist 6 c++ qt qt5 qlayout

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

我的问题:想象一下,我QWidget的左右两侧(在QHBoxLayout或 之类的东西上)有两个普通小部件(源自QGridLayout),我希望用户可以移动分隔它们的线。那可能吗?

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

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

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

请询问您需要的更多信息。

谢谢!

Tar*_*rod 9

我认为您应该使用QSplitter

根据文档:

拆分器允许用户通过拖动子级之间的边界来控制子级小部件的大小。任何数量的小部件都可以由单个拆分器控制。

例如,使用 Qt Creator,如果我们有两个QGridLayoutQPushButton每个都有一个,我们可以选择两者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>
Run Code Online (Sandbox Code Playgroud)