2013-10-20 2 views
1

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

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(); 
} 
+0

Это кажется немного утомительным. Одним из способов достижения чего-то подобного было бы размещение другого окна над первым. Все зависит от вашего рабочего процесса. Столкнувшись с аналогичной проблемой - но многие другие варианты, я выбрал тегированный диалог. – ExpatEgghead

+2

Как насчет сложного виджета, в котором вы переключаетесь на дополнительные виджеты в стеке с помощью кнопки? – drescherjm

+1

Кажется, что [QStackedWidget] (http://qt-project.org/doc/qt-5.0/qtwidgets/qstackedwidget.html) - это то, что вам нужно. – thuga

ответ

0

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

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

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

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

Что я могу предложить, так это то, что вы следуете шаблону дизайна Model-View-Controller (MVC). Вот одно предложение, другие могут иметь лучшие.

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