2012-02-13 12 views
6

mi aplicación requiere que el usuario cambie entre varias pantallas. La forma en que lo hago es creando diferentes QFrames para cada pantalla, y luego establezco los Qframes como widgets centrales en MainWindow. El problema es que cada vez que llamo a setCentralWidget (frame), el viejo marco se elimina y no puedo acceder más tarde. ¿Cómo puedo guardar ese marco antiguo para poder acceder a él más tarde?Qt QMainWindow deleción del widget central

Háganme saber si tengo dudas en mi pregunta.

Respuesta

9

Puede quitar su widget central de QMainWidow reparentándolo. Entonces, puedes establecer un nuevo widget central;

QWidget* savedWidget = mainWnd->centralWidget(); 
savedWidget->setParent(0);//now it is saved 
mainWnd->setCentralWidget(newWidget); 

También usando QStackedWidget posiblemente sería una mejor solución.

+0

Esta solución no funciona, mirando QMainWindow no debería funcionar. ¿Qué versión de Qt estás usando? – Kamath

+0

@Kamath, en el '13 Probablemente estaba usando Qt 4.8. No he estado desarrollando el uso de Qt por un tiempo y no puedo decir si debería o no funcionar con las versiones actuales, pero no veo ninguna razón para que el modelo de objetos cambie significativamente para romper este comportamiento – Lol4t0

+0

Este no es el brach exacto mi fuente para qmainwindow es la misma que tengo https://github.com/openwebos/qt/blob/master/src/gui/widgets/qmainwindow.cpp, veo que setCurrentWidget llama a deleteLater si está actualizado. – Kamath

0

Puede jugar con .hide() /. Show() en los subwidgets apropiados para lograr esto. Pero una solución mejor para su caso es casi seguro utilizar un QTabWidget o QStackedWidget.

4

QStackedWidget es una solución elegante para este problema, puede encontrar cómo usarlo correctamente here.