QWidget вот так ui->gridLayout->addWidget(new Form(this)); но потом мне надо ui->gridLayout->removeWidget(?); хранить в форме указатель на виджет или как?
сап либо через запоминание указателя либо findChildern и среди них искать то что нужно
Лучше все-таки хранить указатели, на мой взгляд лучше воздерживаться от мета программирования по возможности.
А как их тогда удалять? если допустим так ui->gridLayout->addWidget(new Form(form_ptr)); ui->gridLayout->removeWidget(form_ptr); Не работает Тогда так? form_ptr = new Form(); ui->gridLayout->addWidget(form_ptr); delete form_ptr; Это работает)
Ну так и делается :)
выглядит всрато, кажется это не правильно просто
Ну тут, как бы, вопрос в принципе возникает зачем его удалять из layout, но не удалять физически? Он же где-то должен остаться тогда. Если он ещё нужен - тогда проще и правильнее, наверное, скрыть. Если он переносится в другой layout, тогда да, надо подругому.
Ну есть комбобокс и в зависимости от варианта в гриде рисуется виджет
Ну тогда делать вектор виджетов и в конструкторе инициализировать а потом показывать или скрывать
QLayout это же просто компоновщик, по сути просто за размеры виджетов отвечает, т.е. удаление виджета из layout просто ломает пересчет его размеров и всё. В случае если нужно скрывать и показывать нужные виджеты можно попробовать для удобства использовать QStackedWidget или QStackedLayout. Тогда непридется удалять и руками отслеживать что один показать, а остальные скрыть.
У последнего варианта у тебя не падает программа после закрытия окна?)
Не должна, "наживую" можно спокойно удалять виджеты, родитель и layout, я так понимаю, отследят сигнал об удалении и все корректно у себя почистят.
Обсуждают сегодня