Я использую Qt 5.5.0 для Windows. В диалоговом окне, используемом для входа и регистрации, я использую QVBoxLayout в качестве основного макета диалогового окна и добавляю QGridLayout к mainLayout. Когда я нажимаю кнопку «Зарегистрироваться», он добавит слишком большое количество строк для регистрации, и когда я снова нажму на нее, эти элементы будут удалены. Однако, когда я удаляю виджеты в GridLayout, виджеты все еще существуют, и окно не изменяет размер.Невозможно удалить виджеты в макете макета в Qt
Я не хватает репутации, чтобы добавить изображения, поэтому я загрузить iamges здесь: http://i.imgbox.com/WAS6KAQw.png
Вот некоторые из моего кода, так как удалить виджеты в макет сетки?
LoginDialog::LoginDialog(MainWindow * mw, AgendaService * as, QWidget * parent)
// Initialization list
{
// Manage layouts and UI
passwordEdit->setEchoMode(QLineEdit::Password);
mainLayout = new QVBoxLayout;
editLayout = new QGridLayout;
bottomLayout = new QVBoxLayout;
editLayout->addWidget(usernameLabel, 0, 0);
editLayout->addWidget(usernameEdit, 0, 1);
editLayout->addWidget(passwordLabel, 1, 0);
editLayout->addWidget(passwordEdit, 1, 1);
mainLayout->addLayout(editLayout);
QHBoxLayout * buttonLayout = new QHBoxLayout;
buttonLayout->addWidget(registerButton);
buttonLayout->addWidget(loginButton);
bottomLayout->addLayout(buttonLayout);
bottomLayout->addWidget(notifyBar);
mainLayout->addLayout(bottomLayout);
setLayout(mainLayout);
// Set default button
registerButton->setDefault(false);
loginButton->setDefault(true);
// Other code
}
void LoginDialog::showRegister()
{
loginButton->setEnabled(false);
editLayout->addWidget(useremailLabel, 2, 0);
editLayout->addWidget(useremailEdit, 2, 1);
editLayout->addWidget(userphoneLabel, 3, 0);
editLayout->addWidget(userphoneEdit, 3, 1);
}
void LoginDialog::hideRegister()
{
editLayout->removeWidget(userphoneEdit);
editLayout->removeWidget(userphoneLabel);
editLayout->removeWidget(useremailEdit);
editLayout->removeWidget(useremailLabel);
loginButton->setEnabled(true);
}
...