很抱歉,我的问题可能听起来很愚蠢但坦率地说我花了很多时间在互联网上试图弄清楚如何将小部件 s 添加到QMdiSubWindow,我的意思是多个小部件< / strong>不仅仅是一个Widget(这对我来说非常重要..我需要我的Sub窗口包含多个窗口小部件而不是单个窗口小部件。)
例如,我想将这个小部件和布局添加到我的子窗口:
包含QlineEdit和按钮的QVbox,以及包含按钮的QHbox ......
如果你使用上面的例子告诉我如何做到这一点并不重要,无论你使用什么样的例子,真正重要的是向我展示
注意:请使用OOP和Python而不是c ++
答案 0 :(得分:3)
小部件和布局的层次结构应始终遵循
widget -> layout -> widget -> layout -> widget -> ...
每个小部件只能有一个布局,但每个布局可以包含多个小部件(请注意,为简单起见,上面只显示了每个布局的一个小部件)。
因此,您需要做的是创建一个包含布局的窗口小部件,该布局包含QPushButton and
QLineEdit`。例如:
# construct the top level widget
widget = QWidget()
# construct the top level layout
layout = QVBoxLayout(widget)
# create the widgets to add to the layout
button = QPushButton('My Button')
lineedit = QLineEdit()
# add the widgets to the layout
layout.addWidget(button)
layout.addWidget(lineedit)
# set the layout on the widget
widget.setLayout(layout)
# we now have a single widget that contains a layout and 2 widgets
这允许您在单个窗口小部件中有效地封装多个窗口小部件(并且是在内部创建许多更复杂的Qt窗口小部件的方式,例如QSpinBox
)。因此,如果您想在上面的布局中使用另一个复杂的窗口小部件,您可以再次创建另一个widget2 = QWidget()
,创建布局(例如layout2 = QHBoxLayout(widget2)
),然后向其添加多个窗口小部件。完成后,将widget2
窗口小部件添加到原始布局(layout.addWidget(widget2)
)。
希望您现在可以看到如何从任意数量的子窗口小部件和布局构建单个复杂窗口小部件。
此时,您现在可以将单个小部件设置为现有的QMdiSubWIndow
# now add this widget to the QMdiSubWindow
mdisubwindow.setWidget(widget)
或者,调用QMdiArea
上的便捷功能以使用小部件创建新的QMdiSubWindow
:
mdisubwindow = mdiarea.addSubWindow(widget)
注意:对于您的具体示例,您实际上并不需要构建widget2
来封装QHBoxLayout
。您可以通过调用QHBoxLayout
将layout2
(上面的粗略示例中的layout.addLayout(layout2)
)直接添加到原始布局中。但是,这是一个特殊情况,一旦您开始创建自己的窗口小部件类以重新使用代码,交替窗口小部件和布局上面的封装的一般原则会更加通用。