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

Posted

技术标签:

【中文标题】单击按钮时显示另一个 ui 文件【英文标题】:Show another ui file on button click 【发布时间】:2013-10-20 01:47:54 【问题描述】:

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

【问题讨论】:

这似乎有点乏味。实现类似效果的一种方法是将另一个窗口放在第一个窗口上。这完全取决于您的工作流程。面对类似的问题 - 但有更多选择,我选择了标记对话框。 使用一个按钮切换到堆栈中的其他小部件的堆叠小部件怎么样? 看来QStackedWidget是你需要的。 @drescherjm 谢谢,这就是我要找的 【参考方案1】:

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

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

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

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

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

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

【讨论】:

以上是关于单击按钮时显示另一个 ui 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Interface Builder 中创建 NSToggleButton?

用户登录 Facebook SDK 时显示另一个视图

php 或 javascript 文本文件分号 db 使用一条记录在悬停时显示另一条记录

在 WebView 加载时显示另一个故事板,然后切换回原始故事板

从 Access 导出 csv 时显示另存为对话框

我希望一个数组在循环时显示另一个数组的值