Qt QDialog com a ocultar e WA_QuitOnClose
-
13-12-2019 - |
Pergunta
Eu tenho um problema, eu estou chamando de " meu QDialog como este no main():
app.setQuitOnLastWindowClosed(true);
splashWin startWin;
if(!startWin.exec())
{
// Rejected
return EXIT_SUCCESS;
}
// Accepted, retrieve the data
startWin.myData...
E no QDialog eu tenho o seguinte código:
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);
}
É muito simples de código, o problema é:o setVisible(false) ou ocultar() linha mostra a janela sobre, mas assim que a janela é dispensada a "rejeitar" de diálogo código é enviado e o meu aplicativo fecha executar o
// Rejected
return EXIT_SUCCESS;
linhas de main()
Por que isso?Na documentação li que o hide() não deve retornar nada.Eu estou usando o Qt 4.8.2
Solução
QDialog::setVisible(false)
não interromper o seu próprio ciclo de eventos, mas você pode chamar explicitamente a classe base a versão da função, QWidget::setVisible
, em vez disso, a fim de evitar esse comportamento:
void splashWin::show_About_Window()
{
MyAboutWindow win;
QWidget::setVisible(false);
win.exec();
setVisible(true);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow