Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Edynchik от Июль 05, 2013, 13:10



Название: Не вызывается деструктор
Отправлено: Edynchik от Июль 05, 2013, 13:10
Добрый день. Создал форму mainwindow и дочернее окно dialog, при закрытии dialog по крестику, не вызывается деструктор dialog. Dialog создается в как глобальная переменная, т.е. в mainwindow.h QDialog *dialog; а в кнопке по которой вызывается происходит dialog = new QDialog(this);dialog->show();. Я так понимаю по крестику объект dialog не уничтожается, а уничтожается только по закрытии всей программы. Скажите как можно исправить? Спасибо


Название: Re: Не вызывается деструктор
Отправлено: VPS от Июль 05, 2013, 13:17
можно так попробовать:
Код:
dialog->setAttribute(Qt::WA_DeleteOnClose, true);

Или руками удалять


Название: Re: Не вызывается деструктор
Отправлено: alex312 от Июль 05, 2013, 13:21
создавай диалог локально.
Код
C++ (Qt)
void MainWindow::askUser()
{
   MyDialog d;
 
   if(d.exec())
   {
       // чегото делаем
    }
}
 


Название: Re: Не вызывается деструктор
Отправлено: Edynchik от Июль 05, 2013, 13:22
Спасибо, но сигнала close() или типа того не нашел.


Название: Re: Не вызывается деструктор
Отправлено: Edynchik от Июль 05, 2013, 13:28
создавай диалог локально.
Код
C++ (Qt)
void MainWindow::askUser()
{
   MyDialog d;
 
   if(d.exec())
   {
       // чегото делаем
    }
}
 
интересный способ, а это все процессы не повесит?


Название: Re: Не вызывается деструктор
Отправлено: alex312 от Июль 05, 2013, 13:33
интересный способ, а это все процессы не повесит?
http://qt-project.org/doc/qt-5.1/qtwidgets/qdialog.html#exec


Название: Re: Не вызывается деструктор
Отправлено: lit-uriy от Июль 05, 2013, 16:04
>>Спасибо, но сигнала close() или типа того не нашел.
В документации смотри все сигналы, в том числе унаследованные:
1 signal inherited from QWidget
2 signals inherited from QObject

А вообще для дилогов правильнее использовать их родные сигналы
rejected() - отмена (тот же крестик на окне даёт такой сигнал)
accepted() - принято (пользователь принял/подтвердил какое-то действо)
finished(int result) - универсальный