У меня есть кнопка в моем первом окне 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();
}
Теоретически возможно заменить один интерфейс другим.
Вам нужно будет выполнить следующие шаги:
setupUi(this)
на новом интерфейсеКак я уже сказал, это теоретически. Это далеко не практично, потому что ваши классы пользовательского интерфейса должны быть производными от того же базового класса, и все слоты, относящиеся к вашему первому пользовательскому интерфейсу, могут вести себя странно, если они подключены к вашему новому пользовательскому интерфейсу.
Я могу предложить вам следовать Модель-Вид-Контроллер (MVC) шаблон дизайна. Вот одно предложение, другие могут иметь лучшие.
QWidget
функционировать как ваш Controller
учебный класс. Разработайте все сигналы и слоты, которые будут обрабатывать все пользовательские события, генерируемые View
,Controller
учебный класс. Позвольте построить все элементы пользовательского интерфейса в конструкторе класса Controller, а затем соединить все сигналы и слоты. Это будет функционировать как View
в шаблоне дизайна. Model
или передайте один вашему Controller
учебный класс. Используйте это, чтобы установить все значения дочерних виджетов в вашем View
UI.Controller
QWidget к QMainWindow
функция setCentralWidget()
установить его как пользовательский интерфейс, который может видеть пользователь.setCentralWidget()
на QMainWindow
перейти на соответствующий интерфейс.Других решений пока нет …