2012-02-13 18 views
6

la mia applicazione richiede all'utente di passare tra più schermi. Il modo in cui sto facendo questo è creando diversi QFrames per ogni schermo, e quindi impostando i Qframes come widget centrali sulla MainWindow. Il problema è che ogni volta che chiamo setCentralWidget (frame), il vecchio frame viene cancellato e non posso accedervi più tardi. Come posso salvare quella vecchia cornice in modo che possa accedervi in ​​seguito?Qt QMainWindow cancellazione widget centrale

Per favore fatemi sapere se non sono chiaro nella mia domanda.

risposta

9

È possibile rimuovere il widget centrale da QMainWidow reparentandolo. Quindi, puoi impostare new centralWidget;

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

Anche utilizzando QStackedWidget potrebbe essere la soluzione migliore.

+0

Questa soluzione non funziona, guardando QMainWindow non dovrebbe funzionare. Quale versione di Qt stai usando? – Kamath

+0

@Kamath, indietro nel '13 Probabilmente stavo usando Qt 4.8. Non ho sviluppato Qt per un po 'e non posso dirlo, se dovrebbe funzionare o meno con le versioni correnti, ma non vedo alcun motivo per cui il modello oggetto cambi in modo significativo per rompere questo comportamento – Lol4t0

+0

Questo non è il la mia sorgente esatta per qmainwindow è la stessa che ho https://github.com/openwebos/qt/blob/master/src/gui/widgets/qmainwindow.cpp, vedo le chiamate setCurrentWidget deleteLater se aggiornate. – Kamath

0

È possibile giocare con .hide() /. Show() sui subwidgets appropriati per ottenere ciò. Ma una soluzione migliore per il tuo caso è quasi certamente quella di utilizzare uno QTabWidget o QStackedWidget.

4

QStackedWidget è una soluzione elegante per questo problema, è possibile scoprire come usarlo correttamente here.