2017-04-06 9 views
0

私のアプリのさまざまなモード/状態を実行しようとしています。たとえば、ゲームの状態になり、ハイスコアになり、メニューを2つ戻すメニューがあります。QMainWindowをスーパークラスとして使用しているアプリケーションを切り替える

私が試みた解決策は、最初にクラスMenuGameを作成するためのスーパークラスとして自動生成クラスQMainWindowを使用していました。 QMainWindowでは、後でQMainWindowを作成し、MenuまたはGameなどで埋めてください。 QMainWindow.paintEvents() にポリモルフィズムを呼び出す。

QMainWindowを別のQMainWindowに作成することはできませんが、この考えはstatesという別のサブクラスまたは既存のスーパー/サブクラスの間に存在するのでしょうか?

QMainWindowの代わりにちょうどGameを実行して、継承が正しく行われている可能性があります。しかし、GameQMainWindowに作成して実行しようとすると、のコンストラクタでsigsegvと表示されました(これは変更されず、空の場合は完全に細かいbby自体で実行されます)。私は自分自身を含むクラスで問題を解決したので、それも問題ではありません。

+1

1)sigsegv(と残りの質問)の役に立つヘルプを得るために、いくつかの最小限のコードがあなたが試したことを示すのに役立ちます。 2)別のQMainWindowでQMainWindowを作成することはできますが、何も停止させることはありません。 3)複数のQMainWindowsはめったに必要ではなく、あなたの説明に基づいて、1つでも必要ない可能性があります。そのクラスには便利なデフォルトの機能とレイアウトがありますが、メニューバーやドッキングウィジェットなどを使用しない場合は、プレーンなQWidgetを拡張してアプリケーションのメインウィンドウとして使用する方がよいでしょう。 –

+0

ありがとうございます。私は基本的にQMainWindow atmを持っていますが、すべてのメニューと余分な機能がないので、代わりにQWidgetを使用する方法を調べてみましょう。QMainWindow/QWidgetが受け取るものを受け取る 'State'クラスを持つことで、 'State'をサブクラスにすることなく、そのサブクラスに転送します。 – Zack

答えて

0

私はQMainWindowによって呼び出されるメニューとゲームのスーパークラス "State"を(QMainWindowにサブクラスを作らずに)作って解決しました。

これは基本的に実装後に存在していた "状態"のパターンです。

関連する問題