单击按钮时显示另一个 UI 文件

Show another ui file on button click

本文关键字:UI 文件 另一个 显示 按钮 单击      更新时间:2023-10-16

我的第一个Qt窗口上有一个按钮。单击该按钮时,当前窗口的 UI 应更改为其他 UI 文件的 UI。现在,当我单击按钮时,会打开一个新窗口,但旧窗口仍然打开。有没有办法用不同的内容替换当前窗口的内容?还是简单地打开另一个窗口并销毁第一个窗口更好?

主窗口.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();
}
理论上可以将

一个 UI 替换为另一个 UI。

您需要执行以下步骤:

  1. 销毁构造函数中第一个 UI 创建的所有子对象
  2. 创建新 UI 的实例
  3. 在新 UI 上运行setupUi(this)

正如我所说,这是理论上的。不过,这远非实用,因为您的 UI 类必须从同一个基类派生,并且如果连接到新 UI,与您的第一个 UI 相关的所有槽可能会表现得很奇怪。

我可以建议的是,您遵循模型-视图-控制器(MVC)设计模式。这里有一个建议,其他人可能有更好的建议。

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