我在研究Qt佈局和窗口小部件管理,並遇到了我無法解釋的行爲。自動添加QLayout的目的是什麼objectName'_layout'
我有以下層次結構中的基本UI:
MainWindow(QMainWindow) ->
centralwidget (QWidget),
menubar(QMenuBar),
statusbar(QStatusBar)
後來我補充幾個佈局和小部件的centralwidget,但是,我beleive,這不是重要的在這方面。現在
,如果我們檢查主窗口的子對象及其對象名排序,我們將看到以下內容:
<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不是持久的,偶爾會被添加和刪除,例如調整大小。
<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
佈局是存在的,但每一次的對象是新的:經過多次調整窗口大小我已經添加了resize事件的eventFilter,這裏是對象的地址。
這是怎麼回事嗎?這個QLayout的目的是什麼,以及它爲什麼這樣表現?
謝謝你的解釋!你是對的,由於某種原因,PyQt圍繞相同的底層C++對象返回一個新的包裝。我搜索了一種獲取包裝對象地址的方法,並找到''''sip.unwrapinstance(obj)'''。它爲這些不同的Python包裝返回相同的地址。 – wombatonfire