Скорее всего, у вас есть следующая строка в конструкторе вашего подкласса QDialog
:
setAttribute(Qt::WA_DeleteOnClose);
Это делает возможным автоматическое удаление дочернего диалога MyWindowClass
, когда он закрыт, сродительское окно MainWindow
все еще открыто.
Документация Qt::WA_DeleteOnClose
гласит:
Заставляет Qt удалить этот виджет, когда виджет принялсобытие close (см. QWidget :: closeEvent ()).
Следующий пример, который я подготовил для вас, демонстрирует эффект:
#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QDialog>
class MainWindow : public QMainWindow
{
// Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr) :
QMainWindow(parent)
{
auto *button = new QPushButton(tr("Open dialog"), this);
setCentralWidget(button);
connect(button, &QPushButton::clicked, [this](){
auto *dialog = new QDialog(this);
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->resize(300, 200);
dialog->show();
connect(dialog, &QDialog::destroyed, [](){
qDebug("Dialog's gone.");
});
});
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Этот код позволяет новому пустому диалогубыть открытым при каждом нажатии кнопки.Если диалоговое окно закрыто, в консоли выводится Dialog's gone.
.
Комментирование строки
dialog->setAttribute(Qt::WA_DeleteOnClose);
в примере предотвращает автоматическое удаление объектов диалогового окна, поэтому сообщение не будетпечататься при закрытии диалогового окна.