首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动添加QLayout和objectName '_layout‘的目的是什么?

自动添加QLayout和objectName '_layout‘的目的是什么?
EN

Stack Overflow用户
提问于 2017-10-07 16:45:35
回答 1查看 53关注 0票数 1

我在探索Qt布局和小部件管理,并遇到了我无法解释的行为。

我有一个具有以下层次结构的基本UI:

代码语言:javascript
复制
MainWindow(QMainWindow) ->
    centralwidget (QWidget),
    menubar(QMenuBar),
    statusbar(QStatusBar)

稍后,我向中心小部件添加了几个布局和小部件,但是,我想,在这个上下文中它并不重要。

现在,如果我们检查MainWindow的子对象及其objectNames,我们将看到以下内容:

代码语言:javascript
复制
<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,下面是几个窗口大小调整后的对象地址:

代码语言:javascript
复制
<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的目的是什么,为什么它的行为是这样的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-07 19:01:23

QMainWindow类有一个内置的自定义布局,它管理所有工具栏、菜单、坞小部件、statusbar和中央小部件区域:

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

repr中显示的对象id并不意味着什么。这是布局的PyQt包装器的id,而不是底层C++对象的内存地址。布局实际上是一个QMainWindowLayout,但这不是一个公共类型,因此PyQt只能返回一个QLayout (这是它的基类)。很可能PyQt每次访问它时都会围绕相同的底层C++对象返回一个新的包装器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46622706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档