Trzymaj wskaźnik do obecnie otwartego Dialogu, nulluj go przy zamykaniu dialogu. Jeżeli != NULL, to go zamykasz i tworzysz nowy, == NULL to tylko tworzysz, pseudo-qt:
/* MyWinodow.h
QDialog* mydialog;
*/
// MyWindow.cpp
void MyWindow::on_mybutton_clicked()
{
if(mydialog != NULL)
{
disconnect(mydialog, 0, 0, 0);
mydialog->deleteLater();
}
mydialog = ... ; // przypisanie wskaźnika na nowy obiekt
connect(mydialog, clicked(), this, on_my_button_clicked());
}