QT主窗口关闭,同时关闭打开的子窗体

问题描述:QT主窗口关闭,但打开的子窗体未关闭。

解决方式:在子窗体的构造函数中,设置如下属性:  

this->setAttribute(Qt::WA_QuitOnClose, false);

原理解释:我们可以发现,在主窗体关闭但子窗体未关闭时,程序依然在运行未退出,而如果主窗体关闭,程序退出,那么其他子窗体也能自动关闭。

Qt::WA_QuitOnClose属性的意思是指在最后一个窗体关闭时退出程序,是通过发送lastWindowClosed信号,当发送该信号时,程序会执行quit函数,具体可参考Qt Assistant中的说明。

而目前是当我们打开子窗体时,该属性默认设置为true,也就是说即使主窗体关闭了,程序也不会退出,需要等到最后一个窗口关闭之后才退出。那么就需要将除主窗体外的窗体的Qt::WA_QuitOnClose属性设置为false,这样当主窗体关闭时就会发送lastWindowClosed信号退出主程序。

 

 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Qt中,可以通过使用QMainWindow类作为窗口,并使用QDialog类作为窗口来实现窗口打开窗口的功能。 首先,在Qt的工程中创建一个窗口的类,例如MainWindow类。在类的构造函数中,创建一个QPushButton按钮,点击该按钮时触发一个信号,连接到一个槽函数,该槽函数用于打开窗口。 然后,创建窗口的类,例如ChildWindow类,继承自QDialog类。在窗口的构造函数中,可以添加一些需要显示的控件或布局。 在槽函数中,可以创建一个ChildWindow的实例,并将其显示出来。可以使用show()方法来显示窗口。 以下是用于实现窗口打开窗口功能的示例代码: ```cpp // mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPushButton> #include "childwindow.h" class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void openChildWindow(); private: QPushButton *button; }; #endif // MAINWINDOW_H // mainwindow.cpp #include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { button = new QPushButton("Open Child Window", this); connect(button, SIGNAL(clicked()), this, SLOT(openChildWindow())); } MainWindow::~MainWindow() { } void MainWindow::openChildWindow() { ChildWindow *childWindow = new ChildWindow(this); childWindow->show(); } ``` ```cpp // childwindow.h #ifndef CHILDWINDOW_H #define CHILDWINDOW_H #include <QDialog> #include <QLabel> class ChildWindow : public QDialog { Q_OBJECT public: ChildWindow(QWidget *parent = nullptr); ~ChildWindow(); private: QLabel *label; }; #endif // CHILDWINDOW_H // childwindow.cpp #include "childwindow.h" ChildWindow::ChildWindow(QWidget *parent) : QDialog(parent) { label = new QLabel("Child Window", this); } ChildWindow::~ChildWindow() { } ``` 在上述例中,窗口类MainWindow继承自QMainWindow类,窗口类ChildWindow继承自QDialog类。窗口类中有一个QPushButton按钮,点击该按钮会触发openChildWindow()槽函数,在该槽函数中创建ChildWindow的实例,并将其显示出来。 需要注意的是,在窗口类中,调用show()方法来显示窗口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值