Как я могу восстановить начальный центральный виджет QMainWindow? - PullRequest
1 голос
/ 04 июля 2011

Я новичок в Qt и решил немного поиграть с ним, чтобы однажды я смог написать несколько программ с графическим интерфейсом.Я играл с окнами и столкнулся с проблемой.Я создал два новых класса QWidget Form в дополнение к QMainWindow.С одним из них я смог сделать отдельное всплывающее окно и исчезнуть.То, что я пытаюсь сделать со вторым, это ...

У меня есть MainWindow с кнопкой, и когда эта кнопка нажата, CentralWidget меняется на QWidget с другой кнопкой.Затем, когда я нажимаю кнопку на новой кнопке, она восстанавливает CentralWidget в исходный.

Я пытался сохранить исходный CentralWidget перед его изменением, но мне еще не удалось его успешно восстановить.Я знаю о QStackedWidget, но я хотел бы знать, есть ли другой способ сделать это.СПАСИБО!

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

Кажется, Qt удаляет дочерний виджет, когда новый назначается как дочерний виджет.Следующий код иллюстрирует это и показывает обходной путь

class QMyWidget: public QWidget
{
public:
    ~QMyWidget(){std::cout<<"Destroyed"<<std::endl;}
};

class QMyWidget2: public QWidget
{
public:
    ~QMyWidget2(){std::cout<<"Destroyed2"<<std::endl;}
};

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setCentralWidget(new QMyWidget());
    this->setCentralWidget(new QWidget);

    QWidget * w = new QMyWidget2();
    this->setCentralWidget(w);
    w->setParent(NULL);
    this->setCentralWidget(new QWidget);

}

MainWindow::~MainWindow()
{
    delete ui;
}
0 голосов
/ 05 июля 2011

Хотите QStackedWidget ? Это как QTabWidget, но без вкладок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...