Qt 中的可调整大小 layouts/frames,每个小部件由用户
Resizable layouts/frames in Qt, per widget by the user
我经常使用QGridLayout
,有一个需求我不知道如何实现,或者我是否可以用这种布局实现。
我的问题: 假设我有两个普通的小部件(从 QWidget
派生)在左右(在 QHBoxLayout
或 QGridLayout
),我希望用户可以移动分隔它们的线。这可能吗?
更多信息:
举个例子,想象一下默认的 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>
我经常使用QGridLayout
,有一个需求我不知道如何实现,或者我是否可以用这种布局实现。
我的问题: 假设我有两个普通的小部件(从 QWidget
派生)在左右(在 QHBoxLayout
或 QGridLayout
),我希望用户可以移动分隔它们的线。这可能吗?
更多信息: 举个例子,想象一下默认的 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>