Показать другой файл пользовательского интерфейса при нажатии кнопки

У меня есть кнопка в моем первом окне Qt. Когда кнопка нажата, пользовательский интерфейс текущего окна должен измениться на другой файл пользовательского интерфейса. Прямо сейчас, когда я нажимаю кнопку, открывается новое окно, но старое окно все еще открыто.
Есть ли способ заменить содержимое текущего окна другим содержимым? или лучше просто открыть другое окно и уничтожить первое окно?

mainwindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

}

MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_pushButton_clicked()
{
otherWindow = new OtherWindow();
otherWindow->show();
}

1

Решение

Теоретически возможно заменить один интерфейс другим.

Вам нужно будет выполнить следующие шаги:

  1. Уничтожить все дочерние объекты, созданные первым пользовательским интерфейсом в конструкторе
  2. Создать экземпляр нового пользовательского интерфейса
  3. Бежать setupUi(this) на новом интерфейсе

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

Я могу предложить вам следовать Модель-Вид-Контроллер (MVC) шаблон дизайна. Вот одно предложение, другие могут иметь лучшие.

  1. Создать производный класс QWidget функционировать как ваш Controller учебный класс. Разработайте все сигналы и слоты, которые будут обрабатывать все пользовательские события, генерируемые View,
  2. Создайте пользовательский интерфейс в QtDesigner и сделайте его частным членом вашего Controller учебный класс. Позвольте построить все элементы пользовательского интерфейса в конструкторе класса Controller, а затем соединить все сигналы и слоты. Это будет функционировать как View в шаблоне дизайна.
  3. Если вам нужны постоянные данные, создайте класс или коллекцию классов, чтобы они функционировали как Modelили передайте один вашему Controller учебный класс. Используйте это, чтобы установить все значения дочерних виджетов в вашем View UI.
  4. Пройти Controller QWidget к QMainWindow функция setCentralWidget() установить его как пользовательский интерфейс, который может видеть пользователь.
  5. Повторите шаги 1-4 для каждого отдельного интерфейса, который может вам понадобиться.
  6. Когда вам нужно поменять интерфейс, просто используйте setCentralWidget() на QMainWindow перейти на соответствующий интерфейс.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]