单击按钮显示另一个ui文件

时间:2013-10-20 01:47:54

标签: c++ qt qmainwindow qt-signals

我的第一个Qt窗口上有一个按钮。单击该按钮时,当前窗口的ui应更改为其他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();
}

1 个答案:

答案 0 :(得分:0)

理论上可以将一个UI替换为另一个UI。

您需要按照以下步骤操作:

  1. 销毁构造函数中第一个UI创建的所有子对象
  2. 创建新UI的实例
  3. 在新用户界面上运行setupUi(this)
  4. 正如我所说,这是理论上的。这远非实用,因为您的UI类必须从相同的基类派生,并且如果连接到新UI,与第一个UI相关的所有插槽可能会表现得很奇怪。

    我可以建议您遵循Model-View-Controller (MVC)设计模式。这是一个建议,其他人可能有更好的建议。

    1. 创建QWidget的派生类,以充当您的Controller类。设计将处理View生成的所有用户事件的所有信号和插槽。
    2. 在QtDesigner中设计UI,并将其设为Controller类的私有成员。让我们在Controller类的构造函数中构建所有UI元素,然后连接所有信号和插槽。这将在设计模式中用作View
    3. 如果您需要一些持久性数据,可以创建一个类或一组类来充当Model,或者将一个类传递给Controller类。使用此选项可在View UI中设置子窗口小部件的所有值。
    4. Controller QWidget传递给QMainWindow函数setCentralWidget(),将其设置为用户可以看到的用户界面。
    5. 对您可能需要的每个不同的UI重复步骤1-4。
    6. 当您需要换出用户界面时,只需使用setCentralWidget()上的QMainWindow更改为相应的用户界面。