Qt qdialog con nascondino e wa_quitonclose
-
13-12-2019 - |
Domanda
Ho un problema, sto chiamando il mio qdialog come questo nel principale ():
app.setQuitOnLastWindowClosed(true);
splashWin startWin;
if(!startWin.exec())
{
// Rejected
return EXIT_SUCCESS;
}
// Accepted, retrieve the data
startWin.myData...
.
E in QDialog ho il seguente codice:
splashWin::splashWin(QWidget *parent) :
QDialog(parent),
ui(new Ui::splashWin)
{
ui->setupUi(this);
this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
this->setAttribute(Qt::WA_QuitOnClose);
}
void splashWin::on_OK_clicked()
{
// Prepare my data
..
accept();
}
void splashWin::show_About_Window()
{
MyAboutWindow win;
setVisible(false); // <- this causes the application to send a "reject" signal!! why??
win.exec();
setVisible(true);
}
.
È un codice piuttosto semplice, il problema è: la linea Secondible (False) o Hide () () mostra la finestra sulla finestra ma non appena quella finestra viene spegnisata un codice di dialogo "Rifiuta" viene inviata e la mia applicazione chiude l'esecuzione del .
// Rejected
return EXIT_SUCCESS;
.
Linee del principale ()
Perché è quello?Nella documentazione ho letto quella nascondi () non dovrebbe restituire nulla.Sto usando Qt 4.8.2
Soluzione
QDialog::setVisible(false)
interrompe il proprio loop per eventi, ma è possibile chiamare esplicitamente la versione della classe base della funzione, QWidget::setVisible
, invece per evitare quel comportamento:
void splashWin::show_About_Window()
{
MyAboutWindow win;
QWidget::setVisible(false);
win.exec();
setVisible(true);
}
.