0

サブダイアログで親 wxFrame ポインタを取得する方法

ある機能を実現するプログラムを作ります。wxFrame、wxMenubar、wxScrolledWindow、wxListBox があります。メニューバーのいくつかのメニューをクリックして、情報入力用のいくつかの dlg を作成します。おそらくいくつかのレベルがあります (dlg の作成後、サブ dlg も作成します)。私の質問は、dlg で wxFrame ポインターを取得する方法です。通常、作成したdlgは次のようになります。

クラス Qgis2wxDbSourceSelectDlg : public wxDialog

Qgis2wxDbSourceSelectDlg( wxWindow* 親, wxWindowID id = wxID_ANY, const wxString& title = wxT("Add PostGIS Table(s)"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 269,286 ), long style = wxDEFAULT_DIALOG_STYLE );

Qgis2wxDbSourceSelectDlg に wxFrame ポインタを置きたいのですが、どうすればよいですか?

Qgis2wxDbSourceSelectDlg も wxFrame から継承する必要がありますか? Qgis2wxDbSourceSelectDlgへのwxFrameポインタに転送する方法は?

4

1 に答える 1

1

さまざまな解決策があります:

  1. 最も汚い方法は、 の親を にキャストするQgis2wxDbSourceSelectDlgことwxFrameです。これが可能なのは、everywxDialogGetParentを返す関数があるためwxWindow*です。wxFrame* frame = dynamic_cast< wxFrame* >(this->GetParent())

  2. 別のオプションはwxFrame、コンストラクターでを渡すことです (コンストラクター内で置き換えることができwxWindow* parentます。次に、メンバーを追加する必要がありparentますQgis2wxDbSourceSelectDlg

  3. 私が推奨する最後のオプションは、メイン フレームから始めて、すべてのウィンドウ/ダイアログにアクセスできるコントローラーを用意することです。コールバックを処理し、ダイアログを作成し、ユーザー入力に反応します (など...)。

于 2013-08-27T15:23:52.703 に答える