2012-02-13 25 views
6

私のアプリケーションでは、複数の画面を切り替える必要があります。私がこれをやっているのは、各画面に異なるQFramesを作成し、MainWindow上の中央ウィジェットとしてQframesを設定することです。問題は、setCentralWidget(フレーム)を呼び出すたびに古いフレームが削除され、後でアクセスできなくなることです。古いフレームを保存して後でアクセスできるようにするにはどうすればいいですか?Qt QMainWindow中央ウィジェットの削除

質問に不明な点がある場合は教えてください。

答えて

9

中央ウィジェットをQMainWidowから削除することができます。次に、新しいcentralWidgetを設定できます。

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

また、QStackedWidgetを使用すると、おそらく良い解決策になります。

+0

この解決策は動作しません。QMainWindowが機能しないはずです。どのバージョンのQtを使用していますか? – Kamath

+0

@Kamath、'13に戻って、おそらくQt 4.8を使用していました。 Qtを使って開発していないし、現在のバージョンでは動作しないかどうかはわかりませんが、オブジェクトモデルがこの動作を大幅に変更する理由はありません。 – Lol4t0

+0

これは正確なbrach qmainwindowの私のソースはhttps://github.com/openwebos/qt/blob/master/src/gui/widgets/qmainwindow.cppと同じです。setCurrentWidgetが更新された場合は、deleteLaterを呼び出します。 – Kamath

0

適切なサブウィジェットで.hide()/。show()を使用すると、これを実行できます。しかし、あなたの場合のより良い解決法は、確かにQTabWidgetまたはQStackedWidgetを使用することです。

4

QStackedWidgetはこの問題の洗練されたソリューションです。正しく使用する方法を見つけることができますhere

関連する問題