单击按钮时显示另一个 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?
php 或 javascript 文本文件分号 db 使用一条记录在悬停时显示另一条记录