1

我的第一个 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();
}
4

1 回答 1

0

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

您将需要执行以下步骤:

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

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

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

  1. 创建一个派生类QWidget作为您的Controller类。设计将处理由View.
  2. 在 QtDesigner 中设计 UI 并使其成为您Controller班级的私有成员。让我们在 Controller 类的构造函数中构建所有 UI 元素,然后连接所有信号和插槽。这将View在设计模式中发挥作用。
  3. 如果您需要一些持久性数据,请创建一个类或类集合以充当Model,或者将一个传递给您的Controller类。View使用它来设置UI中子小部件的所有值。
  4. ControllerQWidget 传递给QMainWindow函数setCentralWidget()以将其设置为用户可以看到的 UI。
  5. 对您可能需要的每个不同 UI 重复步骤 1-4。
  6. 当您需要更换 UI 时,只需使用setCentralWidget()onQMainWindow更改为适当的 UI。
于 2013-10-21T07:32:18.333 回答