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 шт):

Автор решения: Chorkov

Решение 1: Когда что-то удаляете - обнуляйте соответствующий указатель. (Это вообще очень полезная практика.) Перед использованием проверяйте указатель, и, при необходимости, создавайте новый экземпляр виджета.

Решение 2: В качестве центрального виджета используйте QStackedWidget, а controlWin, scheme - будут его дочерними виджетами. Переключайте активный дочерний виджет с помощью setCurrentWidget https://doc.qt.io/qt-5/qstackedwidget.html#setCurrentWidget

→ Ссылка