質問

wxGladeデザイナーを使用して、小さなアプリケーション用のGUIを生成しています。 メインアプリケーションウィンドウであるwxFrameから継承されたクラスを生成します。 メンテナンスを容易にするために、この生成されたクラスに追加のコードを記述しないようにします。

しかし、wxGladeで作成されたすべてのウィジェットは、実際には自動生成されたメソッドdo_layout()で作成され、生成されたクラスのその生成されたメソッドのスコープ外でそれらにアクセスすることはできません。

生成されたクラスの外にある特定のウィジェットのポインタを取得する方法はありますか?名前、タイプ、子などを列挙することで

役に立ちましたか?

解決

wxWindowから継承されたすべてのクラス(それらの1つであるwxFrame)には、" という機能があります。 GetChildren "は、列挙可能な子ウィンドウのリストを返します。名前で特定のフィールドを探している場合は、" FindWindow を使用してください。 "関数。

他のヒント

実際に自分で答えを見つけました:

wxWindowList & children = myframe->GetChildren();
for ( wxWindowList::Node *node = children.GetFirst(); node; node = node->GetNext() )
{
     wxWindow *current = (wxWindow *)node->GetData();

     // .. do something with current
}

wxFormBuilder をお勧めします。以前にもwxGladeを使用しましたが、それを使用する方法には多くの制約があります。たとえば、wxFormBuilderを使用すると、フォーム上の各コントロールに対して「可視性」(public、protected、private)を選択できます。また、イベントハンドラーの仮想関数を生成することもできるため、wxFormBuilder生成クラスからクラスを派生させて、それらの関数を実装するだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top