Qt qdialog con piel y wa_quitonclose
-
13-12-2019 - |
Pregunta
Tengo un problema, estoy llamando a mi QDialog así en el principal ():
app.setQuitOnLastWindowClosed(true);
splashWin startWin;
if(!startWin.exec())
{
// Rejected
return EXIT_SUCCESS;
}
// Accepted, retrieve the data
startWin.myData...
y en el QDialog tengo el siguiente 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);
}
Es un código bastante simple, el problema es: la línea SETVISIBLE (FALSE) u Ocultar () muestra la ventana Acerca de la ventana, pero tan pronto como se envía un código de diálogo de "Rechazo" y mi aplicación se cierra la ejecución de la/ p>
// Rejected
return EXIT_SUCCESS;
líneas de la principal ()
¿Por qué es eso?En la documentación, leí que la Ocultar () no debe devolver nada.Estoy usando QT 4.8.2
Solución
QDialog::setVisible(false)
Interrumpe su propio bucle de eventos, pero puede llamar explícitamente la versión de clase base de la función, QWidget::setVisible
, en lugar de evitar ese comportamiento:
void splashWin::show_About_Window()
{
MyAboutWindow win;
QWidget::setVisible(false);
win.exec();
setVisible(true);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow