单击按钮时显示另一个 UI 文件
Show another ui file on button click
我的第一个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。
您需要执行以下步骤:
- 销毁构造函数中第一个 UI 创建的所有子对象
- 创建新 UI 的实例
- 在新 UI 上运行
setupUi(this)
正如我所说,这是理论上的。不过,这远非实用,因为您的 UI 类必须从同一个基类派生,并且如果连接到新 UI,与您的第一个 UI 相关的所有槽可能会表现得很奇怪。
我可以建议的是,您遵循模型-视图-控制器(MVC)设计模式。这里有一个建议,其他人可能有更好的建议。
- 创建一个派生的
QWidget
类以用作Controller
类。 设计将处理View
生成的所有用户事件的所有信号和插槽。 - 在QtDesigner中设计UI,并将其设置为
Controller
类的私有成员。Let is 在 Controller 类的构造函数中构建所有 UI 元素,然后连接所有信号和插槽。这将充当设计模式中的View
。 - 如果需要一些持久数据,请创建一个类或类集合以充当
Model
,或者将一个传递给Controller
类。 使用此选项可在View
UI 中设置子小组件的所有值。 - 将 QWidget
Controller
传递给QMainWindow
函数setCentralWidget()
,将其设置为用户可以看到的 UI。 - 对可能需要的每个不同 UI 重复步骤 1-4。
- 当您需要换出 UI 时,只需使用
QMainWindow
上的setCentralWidget()
即可更改为相应的 UI。
相关文章:
- 如何处理使用.ui文件生成的.h文件
- 在 ui 文件中隐藏 QTabWidget 中的单个选项卡窗格?
- 由于多个 *.ui 文件而导致的多个Ui_Dialog定义?
- 如何在Qt Designer UI文件中清除QMainWindow的几何标记
- 将一个 UI 文件添加到另一个 UI 文件中
- 如何使用.UI文件在QT Creator中使用CMAKE制作GUI QT项目
- QT Creator不会更新.UI文件和设计器
- 为什么使用Qt Creator调整.ui文件会导致编译期间对.h文件进行更改
- 连接QT中的多个.UI文件
- 将 .ui 文件导入 Qt5 C++时出错"was not declared in this scope"
- QT在UI文件中恢复了我的更改
- 是否可以在Qt设计器中使用依赖项注入(对于.ui文件)
- QUiLoader:使用自定义小部件加载 .ui 文件的要求
- 在一个程序中处理多个QT Designer UI文件的最佳方法是什么?
- 如何将ui文件类中的按钮连接到其他类中的插槽
- 生成的头文件表单ui文件不可见
- 将 .ui 文件链接到C++
- 单击按钮时显示另一个 UI 文件
- Qt c++:来自多个.ui文件的动态GUI
- Qt使用UI文件和QUiLoader