1

私は自分自身をひどく混乱させて戻ってこないところまで行き、私のプロジェクトは私の現在のやり方に追いつくには大きすぎると感じています。

一言で言えば:

1)多くのグラフィカル画面(ウィンドウ)があり、各画面は、パブリックおよびプライベート減速を伴う.hヘッダーを伴う独自の.cppで定義されたクラスです。

2)FLTK GUIツールキットを使用しているので、画面を離れるときに「hide()」を呼び出します。これはガベージコレクションを行うと想定しており、その後に続く画面の新しいインスタンスを作成します。

私の問題は、画面(画面Aではそれを呼び出すことができます)が別の画面(画面B)を作成する場合、画面Bのヘッダーファイルを画面Aにインクルードする必要があり、画面Aの.cppで画面Bへのグローバルポインターを作成することです。

すなわち。画面Aの疑似コード

#include "screenb.h"

ScreenB* screenb_ptr; // global

...
Bunch of Code, constructors, deconstructors, etc
...

void ScreenA::exit_and_make_screen_b()
{
    ScreenA.hide();
    screenb_ptr = new ScreenB();
}

これが最善のアプローチですか?私はそれがだらしなく(そしてメモリリーク?)感じます、そして私はたくさんの外部修飾されたポインタを追跡するダミーの.cpp/.hのようなものを持っているべきです。特に、画面を前後に移動する必要がある場合があります(つまり、他のいくつかの画面からメインメニュー画面に戻ることができます)。アドバイスをいただければ幸いです。

4

2 に答える 2

2

ここにいくつかの提案があります:

  1. すべての画面に含まれる新しいヘッダーファイルを作成します。次に、この1つのヘッダーファイルをインクルードして、他のすべての画面ヘッダーファイルをキャプチャできます。
  2. 画面へのすべての参照を保持する画面マネージャーを検討することもできます。画面間のナビゲーションは、すべての参照とポインターを処理する画面マネージャーに任されます。このように、画面を結合するのではなく、共通のメディエーターを介して通信します。

例えば:

screenManager->NavigateScreen( SCREEN_USER_PROFILE );

すべての画面は、画面マネージャーへのポインターを保持する基本クラスから継承できます(コンストラクターを介して取得するか、静的シングルトンインスタンスから取得します)。このようにして、すべての画面に新しい画面ナビゲーションを要求する機能があります。

于 2011-03-23T16:04:20.753 に答える
1

ところで:FLTKのメモリ構造については完全にはわかりません。画面を非表示にしてもメモリはまったく削除されない場合がありますが、ウィンドウのGUI表現を非表示にするだけで、後で同じ状態で再び開くことができます。

GUIの良い方法は、必要に応じてGUIを操作するためのコントローラーがあるModel-View-Controllerアーキテクチャーです。

これは、次のように現れます。

WindowManager wm;

void ScreenA::exit()
{
        wm.registerExit(screenb_ptr);
        wm.actOnExit();
}

または、ウィンドウの中央オーケストレーターを使用するための同様の機能。これにより、次のことが可能になります。

  • プラグ可能なインターフェース
  • より良い組織
  • バグからの保護
于 2011-03-23T16:08:38.410 に答える