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

Était-ce utile?

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top