Pregunta

Estoy tratando de hacer 2 ventanas. El segundo debe llamarse primero. No los conecto child- > parent. Pero cuando llamé a la segunda ventana y la cerré, la primera ventana también se cerró. ¿Qué tengo que hacer? Ambas ventanas están inherentes a QWidget. C ++ y Qt


Perdón por mi pobre descripción. Tengo una ventana principal Clase heredada de QMainWindow. Que creé la segunda ventana. Clase heredada de QWidget. En la primera (ventana principal) estoy creando y llamando a la segunda ventana

ConfigWindow *ConfWindow = new ConfigWindow();
ConfWindow->show();

Sin dar enlace al padre. Todo funciona bien, pero cuando cierro la segunda ventana (config-window) mi ventana principal también se está cerrando. No necesito en esto. ¿Qué debo hacer para bloquear el cierre de la ventana principal después del cierre de la ventana de configuración?

Espero describir un poco mejor.

Mi primera ventana tiene estas banderas:

this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);

Sin ellos todo está bien. ¿Podría cambiar algo si necesito esas banderas en mi ventana?

¿Fue útil?

Solución

Necesita algo como:

QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);

Aquí está el programa de prueba: http://pastebin.com/f5903c5f4 .

Cuidado, ahora necesita explícitamente llamar a salir () en el destructor de su ventana principal.

Si lee QApplication :: quitOnLastWindowClosed documentación , encontrará que:

  

Si esta propiedad es verdadera, la aplicación se cierra cuando se cierra la última ventana primaria visible (es decir, ventana sin padre) con el conjunto de atributos Qt :: WA_QuitOnClose. De forma predeterminada, este atributo está configurado para todos los widgets, excepto para las subventanas

Debido a que su ventana principal es una ventana de herramientas (sin marco), sí cuenta. Eso deja a ConfWindow como el único widget de nivel superior que no es de subventanas. Por lo tanto, si cierra ConfWindow, provoca que se cierre la instancia de la aplicación.

Otros consejos

Si este es el código, entonces hay un gran error en Qt.
El código anterior nunca debe cerrar su primer Windows, debe haber algo más mal.
¿La aplicación está cerrada o se bloquea?

Observación
¿Quién está eliminando configWindow? Hay un atributo Qt :: WA_DeleteOnClose que elimina la ventana después de que se cierra.

ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top