我的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
,因为当我想从{{1}重新创建窗口B
时需要重新分配我希望保留A
的参数。
答案 0 :(得分:2)
只有当set a Qt::WA_DeleteOnClose
attribute B
小部件
b->setAttribute(Qt::WA_DeleteOnClose);
另一个选择是重新实现close event并在那里发出自定义信号。
答案 1 :(得分:1)
像这样连接你的对象:
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: