QMainWindow::setCentralWidget убивает указатель на QWidget. Как обойти?
У меня есть главное окно QMainWindow и 2 QWidget, которые должны появляться на главном окне в зависимости от нажатой кнопки (нажал первую - отобразился первый, нажал 2 - отобразился второй).
Когда при первом нажатии кнопки я делаю setCentralWidget на соответствующий виджет, то всё ок, но при повторном нажатии уже вылетает, т.к. тот указатель был удален. Соответственно вопрос: Как мне организовать этот функционал?
P.S. слоты выглядят примерно так:
void StartWin::slotOpenControl()
{
this->setCentralWidget(controlWin);
controlWin->show();
}
void StartWin::slotOpenScheme()
{
this->setCentralWidget(scheme);
scheme->show();
}
Ответы (1 шт):
Решение 1: Когда что-то удаляете - обнуляйте соответствующий указатель. (Это вообще очень полезная практика.) Перед использованием проверяйте указатель, и, при необходимости, создавайте новый экземпляр виджета.
Решение 2: В качестве центрального виджета используйте QStackedWidget, а controlWin, scheme - будут его дочерними виджетами. Переключайте активный дочерний виджет с помощью setCurrentWidget https://doc.qt.io/qt-5/qstackedwidget.html#setCurrentWidget