这样做是安全的,但不会导致
QLineEdit
出现在两个地方。如果你看看
QLayout::addChildWidget(QWidget * w)
qlayout的方法。cpp,您将看到以下代码:
void QLayout::addChildWidget(QWidget *w)
{
QWidget *mw = parentWidget();
QWidget *pw = w->parentWidget();
if (pw && w->testAttribute(Qt::WA_LaidOut)) {
QLayout *l = pw->layout();
if (l && removeWidgetRecursively(l, w)) {
#ifdef QT_DEBUG
if (Q_UNLIKELY(layoutDebug()))
qWarning("QLayout::addChildWidget: %s \"%ls\" is already in a layout; moved to new layout",
w->metaObject()->className(), qUtf16Printable(w->objectName()));
#endif
}
}
if (pw && mw && pw != mw) {
#ifdef QT_DEBUG
if (Q_UNLIKELY(layoutDebug()))
qWarning("QLayout::addChildWidget: %s \"%ls\" in wrong parent; moved to correct parent",
w->metaObject()->className(), qUtf16Printable(w->objectName()));
#endif
pw = nullptr;
}
如调试消息所示,在第二次调用
addWidget()
,小部件将从其旧的父部件和布局中移出,并移到新的父部件和布局中。