カスタムクラスオブジェクトをwxWidgetsの別の関数に渡す方法を教えてもらえますか?私はカスタムクラス "ユーザー"のオブジェクトを作成するvoid型のOnButtonClick関数を含むAddUserというwxDialogクラスを持っています。どのように私はメインクラスにある別のOnButtonClick関数にそのオブジェクトを渡すことができますか?C++、wxWidgetsでカスタムクラスオブジェクトを渡す
答えて
約wxDialog
について知っておくべき重要なことは(もしあなたがまだいない場合)、それらをスタック上に作成することが大丈夫だということです(ほとんどのwxWidgetsウィンドウはヒープ上に作成する必要があります)。
これは、ユーザーが「OK」を押すことによってダイアログインスタンスが閉じられた後でも使用できることを意味します。ダイアログがまだインスタンス化されているので、あなたは、ダイアログのコードでメソッドを含めることができ
... existing method ...
AddUser dialog (this);
if (dialog.ShowModal() == wxID_OK)
{
... process new user ...
}
次のように新しいユーザーを返します:しかし
User AddUser::GetUser()
{
return newUser;
}
次のコードにより、ユーザーの応答をテストすることができますもちろん、新しいユーザーが実際に作成される場所には注意する必要があります。たとえば、新しいユーザオブジェクトがダイアログ内でローカルに作成された場合は、それをコピーする必要があります(上記の例のように)。ヒープ上に作成されている場合(これは私が助言しないでしょう)、ポインタを返すことができます。
bool AddUser::GetUser (User& user)
{
// Make sure that all fields are valid. Simple example given, but
// should be more complete.
if (TextName->GetValue() != "" && TextSurname->GetValue() != "")
{
user.setName(TextName->GetValue());
user.setSurname(TextSurname->GetValue());
return true;
}
return false;
return newUser;
}
そして、呼び出しは次のようになります:あなたのユーザクラスがない限り、ところで
void wxBiblioFrame::OnButAddUserClick(wxCommandEvent& event)
{
AddUser dialog(this);
myUserDialog dialog (this);
myUserClass newUser;
if (dialog.ShowModal() == wxID_OK)
{
if (dialog.GetUser (newUser))
{
... process and store the new user ...
}
else
{
... handle the error ...
}
}
// NOTE: no need to Destroy() the dialog.
}
ダイアログメソッドは次のようになりますので、第3の選択肢はGetUser
メソッドへの参照を渡すことであろう私はあまりにも効率の観点からオブジェクトのコピーを作ることに関心を持っていません。ダイアログを作成して閉じると、コピーを作成するのに時間がかかりすぎる可能性があります。
私はいくつかのことを変えました。私がしようとしていることが論理的であり、可能なかどうかはわかりません。プロジェクトファイルはhttps://github.com/frezn08/wxBibです。 AddUserを使用して、オブジェクトを作成してすべての変数を設定し、それをShowListに渡してTextCtrlに表示します。 – frezn08
http://www59.zippyshare.com/v/gzKC0BoA/file.html – frezn08
あなたがしようとしていることは論理的で可能ですが、私はそれを行う別の方法を提案します。 OKとCancelボタンの 'wxStdDialogButtonSizer'を見てください。 'AddUser :: OnButOKClick'の代わりにOKボタンを押すと自動的に閉じます。次に、 'User'オブジェクトを' GetUser'メソッドに移入することができます(上記の私の更新された答えを見てください)。他のコメント:1)同じダイアログで新しいユーザーと新しい本を作成しません。 2)ShowListの場合、メインフレームにwxListCtrlまたはwxDataViewListCtrlを持つ方が良いでしょう。 – iwbnwif
OnClickイベントを呼び出して、イベントシグネチャのパラメータと異なるものを渡すことはできません。あなたは何かが必要な場合は、おそらくあなたのアプリケーションのアーキテクチャを繰り返し考慮する必要があります。
- 1. wxWidgetsのはC++
- 2. wxWidgetsオーバーレイテキスト(C++)
- 3. Eclipse CDT C++意味エラーwxWidgets
- 4. WCFのカスタムクラスオブジェクト
- 5. linux mintにC++ wxWidgetsをデプロイする
- 6. Cygwinを使ってC++ wxWidgetsをコンパイル
- 7. `ast.literal_eval`はカスタムクラスオブジェクトと同等ですか?
- 8. C#カスタムクラス配列のカスタムクラスオブジェクトを数えよう
- 9. C++のスタティックライブラリ&C++アプリケーションでのwxwidgetsの設定の相違点
- 10. C++ wxWidgetsアプリケーションがコンパイルされない
- 11. wxwidgets/C++プロジェクト用のツールチェーン設定方法
- 12. wxWidgetsのC++パネルが見えない
- 13. C++エラーがwxWidgetsのは、プログラム・エディット
- 14. WCF Data Service:カスタムクラスオブジェクトを返す方法
- 15. 表示オブジェクトをカスタムクラスオブジェクトにキャストする
- 16. リストにカスタムクラスオブジェクトを配置する
- 17. Python Collections.DefaultDict Sort + Output Top Xカスタムクラスオブジェクト
- 18. WxWidgetsコンパイルヘルプ
- 19. C++ WxWidgets:複数のスレッド間でstdoutをwxTextCtrlにリダイレクト
- 20. ネイティブwin32 GUIプログラミング(C++)またはwxWidgetsを選択しますか?
- 21. C++ wxWidgets Gui-Appを閉じるとメモリに残ります
- 22. ExcelデータをLinux/wxWidgets C++アプリケーションに読み込みますか?
- 23. C++ wxWidgets - 幅のないScrolledWindowでの問題
- 24. wxWidgets:アプリケーションパスを取得
- 25. CMakeでwxWidgets 2.xを強制する
- 26. Clion(Ubuntu)でwxWidgets 3.1.0を構築する
- 27. wxWidgetsバインド例
- 28. wxWidgets MinGWビルドエラー
- 29. CMake wxWidgets DLL
- 30. wxWidgetsとlogging
なぜあなたは 'OnButtonClick()'を直接呼びたいのですか? 'User *'を引数とするMainクラスの関数を作成することはできませんか? – rodrigo
mainのOnButtonClick関数は、オブジェクトの内容を表示する機能を提供します。 – frezn08
@Theは、 'User *'をとり、それを表示する関数を追加するだけです。他の機能を呼び出す必要はありません。 – rodrigo