Я создал очень простой GUI-проект в Qt следующим образом:
main:
#include <QApplication>
#include "dialog.h"
int main(int c, char* v[])
{
QApplication app(c,v);
Dialog* d = new Dialog;
d->show();
app.exec();
}
dialog.h:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include "ui_dialog.h"
#include "progress_dialog.h"
class Dialog : public QDialog, private Ui::Dialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private:
progress_dialog* progress_dialog_;
public slots:
void create_and_show_progress_dialog();
void delete_progress_dialog();
};
#endif // DIALOG_H
dialog.cpp:
#include "dialog.h"
#include "ui_dialog.h"
#include <QMessageBox>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),progress_dialog_(new progress_dialog)
{
setupUi(this);
connect(pushButton,SIGNAL(clicked()),this,SLOT(create_and_show_progress_dialog()));
connect(progress_dialog_,SIGNAL(rejected()),this,SLOT(delete_progress_dialog()));
}
void Dialog::create_and_show_progress_dialog()
{
if (!progress_dialog_)
progress_dialog_ = new progress_dialog;
progress_dialog_->exec();
}
void Dialog::delete_progress_dialog()
{
delete progress_dialog_;
progress_dialog_ = nullptr;
QMessageBox::information(this,"Progress destroyed","I've just destroyed progress");
}
Dialog::~Dialog()
{
}
progress_dialog:
#ifndef PROGRESS_DIALOG_H
#define PROGRESS_DIALOG_H
#include "ui_progress_dialog.h"
class progress_dialog : public QDialog, private Ui::progress_dialog
{
Q_OBJECT
public:
explicit progress_dialog(QWidget *parent = 0);
public slots:
void exec_me();
};
#endif // PROGRESS_DIALOG_H
progress_dialog.cpp:
#include "progress_dialog.h"
progress_dialog::progress_dialog(QWidget *parent) :
QDialog(parent)
{
setupUi(this);
}
Таким образом, проблема заключается в том, что после запуска этого приложения и нажатия кнопки push_ в главном диалоговом окне progress_dialogотображаетсяПосле нажатия кнопки push_buttong на progress_dialog, который подключен к слоту отклонения, это диалоговое окно закрывается и отображается сообщение: QMessageBox :: information (this, "Progress Destolved", "I'm just Destroy Progress");
Но когда я делаю это второй раз (нажмите кнопку в главном диалоговом окне, а затем закройте диалоговое окно progress_dialog), сообщение не отображается.Попытался отладить это и установить точку останова на:
void Dialog::delete_progress_dialog()
{
delete progress_dialog_;//HERE BREAKPOINT WAS PLACED
progress_dialog_ = nullptr;
QMessageBox::information(this,"Progress destroyed","I've just destroyed progress");
}
, но эта точка останова срабатывает только в первый раз, и после этого никакие попадания на эту точку останова не выполняются.
Что происходит?