Qt QDialog avec cacher et WA_QuitOnClose
-
13-12-2019 - |
Question
J'ai un problème, j'appelle mon QDialog comme ça dans le main():
app.setQuitOnLastWindowClosed(true);
splashWin startWin;
if(!startWin.exec())
{
// Rejected
return EXIT_SUCCESS;
}
// Accepted, retrieve the data
startWin.myData...
Et dans le QDialog j'ai le code suivant:
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);
}
Il est assez simple de code, le problème est:le setVisible(false) ou de masquer() de la ligne de la fenêtre, mais dès que cette fenêtre est rejetée, "rejeter" boîte de dialogue code est envoyé et mon application se ferme de l'exécution de la
// Rejected
return EXIT_SUCCESS;
les lignes de la main()
Pourquoi est-ce?Dans la documentation, j'ai lu que hide() ne devraient pas retourner quoi que ce soit.Je suis l'aide de Qt 4.8.2
La solution
QDialog::setVisible(false)
ne interrompre sa propre boucle d'événements, mais vous pouvez l'appeler explicitement la version de classe de base de la fonction, QWidget::setVisible
, au lieu, afin d'éviter que le comportement:
void splashWin::show_About_Window()
{
MyAboutWindow win;
QWidget::setVisible(false);
win.exec();
setVisible(true);
}