使用 objectName '_layout' 自动添加 QLayout 的目的是什么
What's the purpose of auto added QLayout with objectName '_layout'
我在探索 Qt 布局和小部件管理时遇到了我无法解释的行为。
我有一个基础 UI 具有以下层次结构:
MainWindow(QMainWindow) ->
centralwidget (QWidget),
menubar(QMenuBar),
statusbar(QStatusBar)
后来我向 centralwidget 添加了几个布局和小部件,但是,我相信,在这种情况下它并不重要。
现在,如果我们检查 MainWindow 的子对象及其对象名称,我们将看到以下内容:
<PyQt5.QtWidgets.QLayout object at 0x00000000089425E8> _layout
<PyQt5.QtWidgets.QWidget object at 0x00000000087C6F78> centralwidget
<PyQt5.QtWidgets.QMenuBar object at 0x0000000008942048> menubar
<PyQt5.QtWidgets.QStatusBar object at 0x00000000089420D8> statusbar
出于某种原因,QLayout 对象 _layout
出现了。但这并不是全部。在我看来,这个 QLayout 不是持久的,偶尔会被添加和删除,例如在调整大小时。我为调整大小事件添加了一个 eventFilter,这里是几次 window 调整大小后的对象地址:
<PyQt5.QtWidgets.QLayout object at 0x0000000008942708> _layout
<PyQt5.QtWidgets.QLayout object at 0x00000000089425E8> _layout
<PyQt5.QtWidgets.QLayout object at 0x0000000008942798> _layout
<PyQt5.QtWidgets.QLayout object at 0x00000000089428B8> _layout
布局是有的,但每次对象都是新的。
这是怎么回事?这个 QLayout 的目的是什么,为什么它会这样?
QMainWindow
class 具有管理所有工具栏、菜单栏、停靠小部件、状态栏和中央小部件区域的内置自定义布局:
无法删除此版式,也无法将其替换为其他版式。如果您尝试这样做,Qt 会报错(甚至可能崩溃)。
repr
中显示的对象 ID 意义不大。这是布局的 PyQt 包装器的 ID,而不是底层 C++ 对象的内存地址。布局实际上是一个 QMainWindowLayout
- 但那不是 public 类型,所以 PyQt 只能 return 一个 QLayout
(这是它的基础 - class) .每次您访问 PyQt 时,很可能 return 围绕同一个底层 C++ 对象创建一个新的包装器。
我在探索 Qt 布局和小部件管理时遇到了我无法解释的行为。
我有一个基础 UI 具有以下层次结构:
MainWindow(QMainWindow) ->
centralwidget (QWidget),
menubar(QMenuBar),
statusbar(QStatusBar)
后来我向 centralwidget 添加了几个布局和小部件,但是,我相信,在这种情况下它并不重要。
现在,如果我们检查 MainWindow 的子对象及其对象名称,我们将看到以下内容:
<PyQt5.QtWidgets.QLayout object at 0x00000000089425E8> _layout
<PyQt5.QtWidgets.QWidget object at 0x00000000087C6F78> centralwidget
<PyQt5.QtWidgets.QMenuBar object at 0x0000000008942048> menubar
<PyQt5.QtWidgets.QStatusBar object at 0x00000000089420D8> statusbar
出于某种原因,QLayout 对象 _layout
出现了。但这并不是全部。在我看来,这个 QLayout 不是持久的,偶尔会被添加和删除,例如在调整大小时。我为调整大小事件添加了一个 eventFilter,这里是几次 window 调整大小后的对象地址:
<PyQt5.QtWidgets.QLayout object at 0x0000000008942708> _layout
<PyQt5.QtWidgets.QLayout object at 0x00000000089425E8> _layout
<PyQt5.QtWidgets.QLayout object at 0x0000000008942798> _layout
<PyQt5.QtWidgets.QLayout object at 0x00000000089428B8> _layout
布局是有的,但每次对象都是新的。
这是怎么回事?这个 QLayout 的目的是什么,为什么它会这样?
QMainWindow
class 具有管理所有工具栏、菜单栏、停靠小部件、状态栏和中央小部件区域的内置自定义布局:
无法删除此版式,也无法将其替换为其他版式。如果您尝试这样做,Qt 会报错(甚至可能崩溃)。
repr
中显示的对象 ID 意义不大。这是布局的 PyQt 包装器的 ID,而不是底层 C++ 对象的内存地址。布局实际上是一个 QMainWindowLayout
- 但那不是 public 类型,所以 PyQt 只能 return 一个 QLayout
(这是它的基础 - class) .每次您访问 PyQt 时,很可能 return 围绕同一个底层 C++ 对象创建一个新的包装器。