如何知道子窗口父窗口销毁窗口
问题描述:
我在我的Qt应用程序中有一个父子窗口。父类是名为A的QDialog
,名为B的子类是QMainWindow
。现在我希望每当B通过“X”按钮关闭时,就会发出一个信号,这个信号可以被A类中的一个插槽捕获,功能被执行。 Qt中可以使用预定义的信号吗?如何知道子窗口父窗口销毁窗口
我想是这样的:
B *b=new B;
//some code
connect(b,SIGNAL(destroyed()),this,&A::doSomething);
B也有一个QWidget
,我可以用它来检测被破坏的信号。我如何实现这一点?我是否需要发出来自~B()
的自定义信号?
编辑:我不想破坏对象b
因为这需要重新分配时,我想重新从A
窗口B
,我想保持b
参数。
b->setAttribute(Qt::WA_DeleteOnClose);
另一种选择是重新实现close event,放出自定义信号有:如果你set a Qt::WA_DeleteOnClose
attribute您B
部件
答
连接你的对象是这样的:
widget = new QWidget();
//widget->show(); //optional using
connect(widget, &QWidget::destroyed, this, &MainWindow::widgetDestroy);
widget->setAttribute(Qt::WA_DeleteOnClose);
的.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_pushButtonNew_clicked()
{
widget = new QWidget();
widget->show();
connect(widget, &QWidget::destroyed, this, &MainWindow::widgetDestroy);
widget->setAttribute(Qt::WA_DeleteOnClose);
}
void MainWindow::on_pushButtonDel_clicked()
{
delete widget;
}
void MainWindow::widgetDestroy()
{
qDebug()<< "deleted."; //after destroy widget this function calling.
}
.H:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWidget>
#include <QDebug>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void widgetDestroy();
void on_pushButtonNew_clicked();
void on_pushButtonDel_clicked();
private:
Ui::MainWindow *ui;
QWidget *widget;
};
#endif // MAINWINDOW_H
的.ui:
[Qt:如何处理用户按'X'(关闭)按钮的事件?](https://*.com/questions/17480984/qt-how-do-i-handle用户按下-x-关闭按钮) – Thrawn