首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使两个QT对话框相互关闭

在QT中,可以使用信号与槽机制来实现两个对话框相互关闭的功能。以下是一个示例代码:

代码语言:txt
复制
// dialog1.h
#ifndef DIALOG1_H
#define DIALOG1_H

#include <QDialog>

namespace Ui {
class Dialog1;
}

class Dialog1 : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog1(QWidget *parent = nullptr);
    ~Dialog1();

signals:
    void dialog1Closed(); // 自定义信号,用于通知其他对话框

private slots:
    void on_pushButton_clicked(); // 按钮点击事件

private:
    Ui::Dialog1 *ui;
};

#endif // DIALOG1_H
代码语言:txt
复制
// dialog1.cpp
#include "dialog1.h"
#include "ui_dialog1.h"

Dialog1::Dialog1(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog1)
{
    ui->setupUi(this);
}

Dialog1::~Dialog1()
{
    delete ui;
}

void Dialog1::on_pushButton_clicked()
{
    emit dialog1Closed(); // 发送自定义信号
    this->close(); // 关闭对话框
}
代码语言:txt
复制
// dialog2.h
#ifndef DIALOG2_H
#define DIALOG2_H

#include <QDialog>

namespace Ui {
class Dialog2;
}

class Dialog2 : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog2(QWidget *parent = nullptr);
    ~Dialog2();

public slots:
    void closeDialog1(); // 槽函数,用于接收来自Dialog1的信号

private:
    Ui::Dialog2 *ui;
};

#endif // DIALOG2_H
代码语言:txt
复制
// dialog2.cpp
#include "dialog2.h"
#include "ui_dialog2.h"

Dialog2::Dialog2(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog2)
{
    ui->setupUi(this);
}

Dialog2::~Dialog2()
{
    delete ui;
}

void Dialog2::closeDialog1()
{
    this->close(); // 关闭对话框
}
代码语言:txt
复制
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "dialog1.h"
#include "dialog2.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void openDialog2(); // 打开Dialog2对话框

private:
    Ui::MainWindow *ui;
    Dialog1 *dialog1;
    Dialog2 *dialog2;
};

#endif // MAINWINDOW_H
代码语言:txt
复制
// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    dialog1 = new Dialog1(this);
    dialog2 = new Dialog2(this);

    connect(dialog1, &Dialog1::dialog1Closed, this, &MainWindow::openDialog2);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::openDialog2()
{
    dialog2->show(); // 打开Dialog2对话框
}

在这个示例中,我们创建了两个对话框:Dialog1和Dialog2。当Dialog1中的按钮被点击时,会发出自定义的dialog1Closed信号,并关闭Dialog1对话框。MainWindow中的openDialog2槽函数接收到dialog1Closed信号后,会打开Dialog2对话框。

这样,当点击Dialog1中的按钮时,Dialog1会关闭,并且Dialog2会打开。这就实现了两个QT对话框相互关闭的功能。

请注意,这只是一个简单的示例,实际应用中可能需要根据具体需求进行适当的修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【QT】Qt 窗口 (QMainWindow)

创建菜单项 在 Qt 中,并没有专⻔的菜单项类,可以通过 QAction 类,抽象出公共的动作。如在菜单中添加菜单项. QAction 可以给菜单栏使⽤, 也可以给⼯具栏使⽤....对话框分类 对话框分为 模态对话框 和 ⾮模态对话框。 模态对话框 模态对话框指的是:显⽰后⽆法与⽗窗⼝进⾏交互,是⼀种阻塞式的对话框。使⽤ QDialog::exec() 函数调⽤。...示例: (1)新建 Qt 项⽬,在 ui ⽂件中的菜单栏中设置两个菜单:“⽂件” 和 “编辑”,在 菜单 “⽂件” 下新建菜单项:“创建” 并将菜单项 “新建” 置于⼯具栏中 ; 如下图⽰: (2)在...),设置下面这个属性就可以在关闭非模态对话框时释放这个对象 dlg->setAttribute(Qt::WA_DeleteOnClose); dlg->show...使⽤ QDialog::setModal() 函数 可以创建混合特性的对话框。通常,创建对话框时需要指定对话框的⽗组件。

35510
  • PyQt5编程基础 2.2 信号与槽函数-设置信号与槽函数

    设置信号和槽对话框类Qdialog内置槽函数accept():关闭对话框,表示肯定的选择,例如“确定”reject():关闭对话框,表示否定的选择,例如“取消”close():关闭对话框将确定按钮与accept...底部的Signals Slots Editor出现一条数据将关闭按钮与close()槽函数关联右边没有close按钮,要选显示从QWidget继承的信号和槽保存Qt项目,将ui文件拷贝到Eric6目录中...QmyDialog() #创建窗体 form.show() sys.exit(app.exec_())运行myDialogmyDialog可以直接运行确定和退出两个按钮都可以正常使用...而SetupUi()函数实现了这两个按钮的信号与窗体相关槽函数的关联。其他按钮还没填代码,所以不行。...appMain.py将myDialog.py文件的测试运行部分单独拿出来作为一个文件当一个应用程序有多个窗体,并且窗体之间有数据传递时,appMain.py负责创建应用程序的主窗体并运行起来,这样使整个应用程序的结构更清晰

    46020

    【QT】QT窗口部件

    QWidget构造函数有两个参数:QWidget*parent = 0,QT:WindowFlages f = 0。...QWidget类关系表 窗体状态 模态 窗口间的阻塞情况,是否必须先关闭某一窗口之后,才能对另一个窗口进行操作。 被设置为模态窗口的窗口关闭之后才能对其他窗口进行操作。...用户必须完成当前对话框中的交互操作并且关闭窗口后才能操作当前音乐程序中的其它窗口。模式对话框有它们自己的本地事件循环。exec()方法可使窗口以模态方式运行。...当用户关闭这个对话框,exec()将提供一个可用的返回值并且这时流程控制继续从调用exec()的地方进行。...通常,我们链接默认按钮,例如"OK"到accpet()槽并且把"Cancel"链接到reject()槽,来使对话框关闭并且返回适当的值。

    1.3K20

    Qt和C++关系

    Qt是一个功能非常完善的c++跨平台图形库,其实与其说图形库倒不如说它是一个与MFC类似的应用框架。Qt本身就是使用c++语言实现。 QT理论上是跨平台的,MFC只是windows下的架构。...而Qt相对c++而言属于高层次的应用,普通的Qt开发人员做的应用程序相对Qt而言又高了一个层此。...qt里的类都是由c++写的,你用qt编程的时候和c++不同点在于:很大一部分和信号与槽有关的c++代码不用你自己来写,是由qt sdk提供的一个程序自动生成的。...总之无论qt自动生成的代码还是你写的调用qt的代码或者qt类库底层的代码都是c++。qt开源。 QT是一个高层的类库,OpenGL是底层的库。 如果相互调用的话,是QT调用OpenGL。...QT则会做更多的事情,比如画出一个完整的对话框,并且替你把对话框的一些点击事件、关闭事件处理一下。而且QT画东西的时候,它并不一定是自己直接画,多半会通过调用OpenGL等库来画出来。

    3.1K50

    PyQt5编程基础 2.2 信号与槽函数

    如上图就在Underline左侧的5上点右键 点工具栏的❌关闭 设置信号和槽 对话框类Qdialog内置槽函数 accept():关闭对话框,表示肯定的选择,例如“确定” reject():关闭对话框...,表示否定的选择,例如“取消” close():关闭对话框 将确定按钮与accept()槽函数关联 点击工具栏上的Edit Signals/Slots按钮 鼠标点击选中确定按钮,按住鼠标左键拖动到窗体空白区域后释放左键...底部的Signals Slots Editor出现一条数据 将关闭按钮与close()槽函数关联 右边没有close按钮,要选显示从QWidget继承的信号和槽 保存Qt项目,将ui文件拷贝到...appMain.py将myDialog.py文件的测试运行部分单独拿出来作为一个文件 当一个应用程序有多个窗体,并且窗体之间有数据传递时,appMain.py负责创建应用程序的主窗体并运行起来,这样使整个应用程序的结构更清晰...这两个都是clicked信号。

    1.9K30

    C++ Qt开发:自定义Dialog对话框组件

    1.1 使用模态对话框传值首先我们需要创建一个自定义对话框,在Qt中创建对话框很容易,具体创建流程如下所示:选择项目 -> AddNew -> QT -> Qt设计师界面类 -> 选择DialogWithoutButtons...BtnOk将第二个组件命名为BtnCancel,界面如下所示;当做完页面布局后,其次我们还需要在Dialog.ui组件上增加两个信号,分别是点击和关闭,并将信号关联到两个槽函数上,其信号应该写成如下图所示...接着我们点开模态对话框的dialog.cpp对话框类,其类内需要定义两个成员函数,它们的功能如下:第一个 GetValue() 用来获取当前编辑框内的数据并将数据返回给父窗体。...OK键被按下,对话框关闭 { // 当BtnOk被按下时,则设置对话框中的数据 QString the_value = ptr->GetValue();...,读者可以拖动父对话框,而由于是信号控制,所以当发送参数到父窗体后,子窗体并不会立即关闭,如下图所示;完整案例下载

    52010

    C++ Qt开发:自定义Dialog对话框组件

    1.1 使用模态对话框传值 首先我们需要创建一个自定义对话框,在Qt中创建对话框很容易,具体创建流程如下所示: 选择项目 -> AddNew -> QT -> Qt设计师界面类 -> 选择DialogWithoutButtons...BtnOk将第二个组件命名为BtnCancel,界面如下所示; 当做完页面布局后,其次我们还需要在Dialog.ui组件上增加两个信号,分别是点击和关闭,并将信号关联到两个槽函数上,其信号应该写成如下图所示...接着我们点开模态对话框的dialog.cpp对话框类,其类内需要定义两个成员函数,它们的功能如下: 第一个 GetValue() 用来获取当前编辑框内的数据并将数据返回给父窗体。...// OK键被按下,对话框关闭 { // 当BtnOk被按下时,则设置对话框中的数据 QString the_value = ptr->GetValue...,读者可以拖动父对话框,而由于是信号控制,所以当发送参数到父窗体后,子窗体并不会立即关闭,如下图所示; 完整案例下载

    62210

    【Qt】:Dialog 对话框

    Qt 常用的内置对话框有: QFiledialog(文件对话框)、QColorDialog(颜色对话框)、QFontDialog (字体对话框)、QInputDialog (输入对话框)和 QMessageBox...新建 Qt 项目,在 ui 文件中的菜单栏中设置两个菜单:“文件” 和 “编辑”,在菜单 “文件” 下新建菜单项:“创建” 并将菜单项 “新建” 置于工具栏中。 B....我们需要将 delete 和关闭按钮的点击信号关联起来,在用户点击关闭时触发 delete,Qt 为了让咱们写的方便, 直接给 QDialog 设置了一个属性,可以通过设置属性, 完成上述效果: Qt:...Qt 内置对话框 Qt 提供了多种可复用的对话框类型,即 Qt 标准对话框。Qt 标准对话框全部继承于 QDialog类。...Qt 中提供了预定义的字体对话框类 QFontDialog,用于提供选择字体的对话框部件。

    7210

    Qt模态对话框和非模态对话框

    模态对话框 Qt 中使用QDialog类实现对话框。我们的对话框通常继承自QDialog。对话框分为模态对话框和非模态对话框。所谓模态对话框,就是会阻塞同一应用程序中其它窗口的输入。...Qt使用QDialog::exec()来实现模态对话框。...如果不关闭Dialog窗口,那么就无法操作下面的MainWindow窗口。这就是模态对话框。 非模态对话框 非模态对话框就是在打开它的时候,我们仍旧能够操作其它的窗口。...//在关闭窗口的时候释放内存 非模态对话框,如果我们创建在栈上,那么它会一闪而过(除非它是全局的或者静态的)。...为了避免这一点,Qt提供了一个setAttribute函数来设置可以在关闭它的时候释放内存。

    3.5K40

    CC++ Qt 自定义Dialog对话框组件应用

    在上一篇博文 《C/C++ Qt 标准Dialog对话框组件应用》 中我给大家演示了如何使用Qt中内置的标准对话框组件实现基本的数据输入功能。...首先需要创建一个自定义对话框,对话框具体创建流程如下 选择项目 -> AddNew -> QT -> Qt设计师界面类 -> 选择空白Dialog -> 命名为Dialog保存 直接选中Dianlog.ui...其次需要在Dialog对话框上增加两个信号,分别是点击和关闭,并将信号关联到两个槽函数上,其信号应该写成如下样子。...接着我们点开dialog.cpp这个类则是对话框类,类内需要定义两个成员函数,它们的功能如下: 第一个 GetValue() 用来获取当前编辑框内的数据并将数据返回给父窗体。...// OK键被按下,对话框关闭 { // 当BtnOk被按下时,则设置对话框中的数据 QString the_value = ptr->GetValue

    64320

    Qt入门系列(二)

    文章首发在博主知乎 ---- 作业1 需求:点击按钮打开,弹出一个新的菜单,单击按钮关闭,关闭新开的菜单 步骤: 1.新建一个QMainWindow项目 2.在1的基础上新建一个类QMainWIndow2...private: QPushButton *btn1=new QPushButton("打开",this); QPushButton *btn2=new QPushButton("关闭...//对话框分类 //模态对话框(不可以对其他窗口进行操作),非模态对话框(可以对其他窗口进行操作) //模态创建 阻塞 QDialog dlg...,防止内存泄漏 dlg3->setAttribute(Qt::WA_DeleteOnClose); qDebug()<<"非模态创建"; 显示: 4.5 消息对话框...界面布局 5.1 登录界面 ui界面编程 步骤: 1.选择两次 Label: Line Edit,分别改名字 2.选择两个Push Button 3.选择Widget进行水平对齐 4.选择最大的Widget

    2K30

    (一)开源C# WPF控件库《MaterialDesignInXAML》强力推荐

    本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相关的Qt Quick和Qt...进度条 10、对话框 遮罩式对话框,是不是很酷?支持整个窗体遮罩,也支持窗体部分用户控件对话框(这个我觉得我实用,有没有您对应的应用场景?) ?...对话框 11、抽屉 Drawer,抽屉式控件,支持东、南、西、北四个方向打开抽屉。 ?...抽屉 12、简单提示 最后一个比较有用的是提示信息,这种方式不用弹框(免得用户点击关闭,即时加定时器自动关闭也不是很友好),可用于提示性的信息,看一眼即可这种。 ?...简单提示 写在文章最后的话 WPF开源控件库很多,大家可以在Github上搜索,这套控件库应该是开源中最好的了,站长个人认为哈,大家也可以在下方留言,大家相互讨论学习,站长在工作中也常用此控件库,真的是极大的方便了工作

    6.7K10

    CC++ Qt 自定义Dialog对话框组件应用

    在上一篇博文 《C/C++ Qt 标准Dialog对话框组件应用》 中我给大家演示了如何使用Qt中内置的标准对话框组件实现基本的数据输入功能。...首先需要创建一个自定义对话框,对话框具体创建流程如下选择项目 -> AddNew -> QT -> Qt设计师界面类 -> 选择空白Dialog -> 命名为Dialog保存图片直接选中Dianlog.ui...图片其次需要在Dialog对话框上增加两个信号,分别是点击和关闭,并将信号关联到两个槽函数上,其信号应该写成如下样子。...图片接着我们点开dialog.cpp这个类则是对话框类,类内需要定义两个成员函数,它们的功能如下:第一个 GetValue() 用来获取当前编辑框内的数据并将数据返回给父窗体。...OK键被按下,对话框关闭 { // 当BtnOk被按下时,则设置对话框中的数据 QString the_value = ptr->GetValue();

    74410

    从close()与hide()引发的一些思考

    关闭只是隐藏 3.2. 关闭前2次确认 Qt从close()与hide()引发的一些思考 1....如果窗口设置过标记位:Qt::WA_DeleteOnClose(关闭时销毁窗口),则出来调用hide()外,还会调用deleteLater()函数。...模态对话框(Modal Dialog) 与 非模态对话框(Modeless Dialog) 的概念不是Qt所独有的,在各种不同的平台下都存在。又有叫法是称为模式对话框,无模式对话框等。...模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。 非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。...exec() 先设置modal属性,而后调用 show() 显示对话框, //最后启用事件循环。在用户关闭这个对话框之前,不能和同一应用程序中的其它窗口交互。

    6.6K21

    开源C# WPF控件库《MaterialDesignInXAML》强力推荐

    本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相关的Qt Quick和Qt...进度条 10、对话框 遮罩式对话框,是不是很酷?支持整个窗体遮罩,也支持窗体部分用户控件对话框(这个我觉得我实用,有没有您对应的应用场景?)...对话框 11、抽屉 Drawer,抽屉式控件,支持东、南、西、北四个方向打开抽屉。...抽屉 12、简单提示 最后一个比较有用的是提示信息,这种方式不用弹框(免得用户点击关闭,即时加定时器自动关闭也不是很友好),可用于提示性的信息,看一眼即可这种。...简单提示 写在文章最后的话 WPF开源控件库很多,大家可以在Github上搜索,这套控件库应该是开源中最好的了,站长个人认为哈,大家也可以在下方留言,大家相互讨论学习,站长在工作中也常用此控件库,真的是极大的方便了工作

    3.9K30

    Qt 学习记录

    的核心,它让两个互不相干的对象连接起来,当一个对象的状态改变时,可以通知另一个对象。...hungry带参数,需要提供重载的自定义信号和 自定义槽 void hungury(QString name); 自定义信号 void treat(QString name ); 自定义槽 但是由于有两个重名的自定义信号和自定义的槽....使用Qt资源 “ : + 前缀名 + 文件名 ” eg:ui->actionnew->setIcon(QIcon(":/icon/image/jj.ico")); 对话框(QDialog) 对话框分为模态对话框和非模态对话框...>setAttribute(Qt::WA_DeleteOnClose); // 55号属性 对话框关闭时,自动销毁对话框。...qDebug() 对话框弹出了"; }); 标准对话框 标准对话框,是 Qt 内置的一系列对话框,用于简化开发。事实上,有很多对话框都是通用的,比如打开文件、设置颜色、打印设置等。

    7.2K50

    【QT】信号与槽

    一、信号和槽概述 在 Qt 中,⽤⼾和控件的每次交互过程称为⼀个事件。⽐如 “⽤⼾点击按钮” 是⼀个事件,“用户关闭窗⼝” 也是⼀个事件。...每个事件都会发出⼀个信号,例如⽤⼾点击按钮会发出 “按钮被点击” 的信号,⽤⼾关闭窗⼝会发出 “窗⼝被关闭” 的信号。在 Qt 中,对信号做出的响应动作就称之为槽。...信号和槽是 Qt 特有的消息传输机制,它能将相互独⽴的控件关联起来。⽐如,“按钮” 和 "窗⼝"本⾝是两个独⽴的控件,点击 “按钮” 并不会对 “窗⼝” 造成任何影响。...例如: “按钮被按下” 这个信号可以⽤ clicked() 函数表⽰,“窗⼝关闭” 这个槽可以⽤ close() 函数表⽰,假如使⽤信号和槽机制-实现:“点击按钮会关闭窗⼝” 的功能,其实就是 clicked...使用 Lambda 表达式定义槽函数 Qt5 在 Qt4 的基础上提⾼了信号与槽的灵活性,允许使⽤任意函数作为槽函数。

    13810

    C++ Qt开发:MdiArea多窗体组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍MdiArea组件的常用方法及灵活运用...该组件主要用于设计多文档界面应用程序,具备有多种窗体展示风格,实现了在父窗体中内嵌多种子窗体的功能,使开发者能够轻松地创建支持多个文档的应用程序。...需要在UI界面中增加mdiArea控件容器,之后所有窗体创建与操作都要在容器内进行,其次由于MDI窗体组件仅仅是一个画布只具备限制窗口的作用,无法实现生成窗体,所以需要在项目中手动增加自定义Dialog对话框...,并对该对话框进行一定的定制,首先绘制如下案例,其顶部是一个QToolBar组件,底部则是一个QMidArea组件,如下图; 接着我们需要以此对上述菜单绑定一个唯一的名称及文本,这个过程可以通过代码实现...平铺模式(Tile): 子窗口以平铺的方式显示,使它们在主窗口中均匀分布,方便用户同时浏览多个子窗口内容。 这些模式提供了不同的用户体验,使用户能够根据实际需求选择最适合他们工作流程的窗口排列方式。

    1.8K10

    Qt官方示例-共享内存

    要运行该示例,请运行两个实例。main()函数创建一个应用程序和我们示例的Dialog类的实例。显示对话框,然后将控制以标准方式传递给应用程序。...它还具有两个公有槽函数,分别是loadFromFile()和loadFromMemory(),它们对应于对话框上的两个按钮。...函数返回时,如果您选择的文件是qt.png,则第一个对话框如下所示。 void Dialog::loadFromMemory() { if (!...此时,两个对话框都应显示相同的图像。当关闭第一个对话框时,对话框析构函数调用QSharedMemory析构函数,该析构函数与共享内存段分离。...关于更多 在QtCreator软件可以找到: 或在 以下Qt安装目录找到: C:\Qt\{你的Qt版本}\Examples\{你的Qt版本}\corelib\ipc\sharedmemory 相关链接

    1.3K20
    领券