При нажатии ОК посылается сигнал QDialog::accepted(), при нажатии отмены - QDialog::rejected(). При закрытии диалога на крестик вызывается тоже QDialog::rejected().
При закрытии диалога деструктор не вызывается по умолчанию, то есть объект, фактически, не уничтожается. Чтобы диалог разрушался ВСЕГДА при закрытии, нужно установить флаг Qt::WA_DeleteOnClose с помощью метода QWidget::setWindowFlags(Qt::WindowFlags type), который доступен, ибо диалог наследует виджет.
Насколько реально нужно всегда закрывать диалог - хз... Мы всегда установливаем флаг WA_DeleteOnClose. Но у нас диалоги тяжелые и открываются по логике редко. То есть либо он открыт и активно используется, либо его закрыли и нужен он будет не скоро.