Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 什么';使用objectName'自动添加QLayout的目的是什么_布局';_Qt_Pyqt_Qt5_Pyqt5_Qlayout - Fatal编程技术网

Qt 什么';使用objectName'自动添加QLayout的目的是什么_布局';

Qt 什么';使用objectName'自动添加QLayout的目的是什么_布局';,qt,pyqt,qt5,pyqt5,qlayout,Qt,Pyqt,Qt5,Pyqt5,Qlayout,我在探索Qt布局和小部件管理,遇到了无法解释的行为 我有一个具有以下层次结构的基本UI: MainWindow(QMainWindow) -> centralwidget (QWidget), menubar(QMenuBar), statusbar(QStatusBar) 后来,我向centralwidget添加了几个布局和小部件,但是,我相信,在这种情况下,它并不重要 现在,如果我们检查MainWindow的子对象及其对象名,我们将看到以下内容: <Py

我在探索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的目的是什么,为什么它会这样

QMainWindow类有一个内置的自定义布局,用于管理所有工具栏、菜单栏、停靠窗口小部件、状态栏和中心窗口小部件区域:

不能删除此布局,也不能用其他布局替换。如果您试图这样做,Qt会抱怨(甚至可能崩溃)


repr
中显示的对象id意义不大。这是布局的PyQT包装器的ID,而不是底层C++对象的内存地址。布局实际上是一个
QMainWindowLayout
——但它不是一个公共类型,因此PyQt只能返回一个
QLayout
(它是它的基类)。很可能PyQt每次访问同一个底层C++对象时都会返回一个新的包装器。你是对的,由于某种原因,PyQt在同一个基础C++对象周围返回一个新包装。我搜索了一种获取包装对象地址的方法,找到了
sip.unwapinstance(obj)
。它为这些不同的Python包装返回相同的地址。
<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