开发过程中,自己创建了一个QVBoxLayout 对象以后,调用 QWidget 的 setLayout 方法,将这个Layout 对象应用到窗口中,运行后没有显示添加的控件。
QWidget 已有布局,新设置的无效,解决方法如下:
1 获取 QWidget 布局 QLayout;
2 删除 布局中的控件和布局
3 重新添加布局和控件
示例如下:
// step 1
QLayout *delLayout = ui->widgetCustom->layout();
// step 2
if (delLayout)
{
// qDeleteAll(this->findChildren<QObject*>()); // error
// delLayout->deleteLater();
// delLayout = nullptr;
QLayoutItem* item;
while ((item = delLayout->takeAt(0)) != nullptr)
{
if (QWidget* widget = item->widget())
{
widget->hide();
widget->deleteLater();
}
delete item;
}
delete delLayout;
}
// step 3
m_vBoxlayout = new QVBoxLayout();
m_btn1 = new QPushButton();
m_vBoxlayout->addWidget(m_btn1);
ui->widgetCustom->setLayout(m_vBoxlayout);