私はwxWidgetsアプリケーションを開発していて、動的に作成されたダイアログオブジェクトへのポインターとしてカスタムイベントクラスで指定されたダイアログを表示するコールバックを作成しようとしています。この理由は、ダイアログの正確なクラスを知らないダイアログ/ウィンドウを開始するコールバックが必要なためです。
このためには、ダイアログをメインスレッド(コールバック関数など)から表示する必要があります。そうしないと、プログラムでエラーが発生します(特定の条件では実行されますが、新しいウィンドウを開始する正しい方法ではないことをユーザーに通知します)。
そこで、新しいダイアログを作成し、それをカスタムイベントに割り当て、イベントをメインウィンドウのキューに入れます。
wxDialog *dialog = new TelemetryDialog(MainWindow::mInstance);
DialogEvent *event = new DialogEvent(EVENT_DIALOG_SHOW, dialog);
MainWindow::mInstance->m_eventHandler->QueueEvent(*event);
次に、コールバック関数で:
wxDialog *dialog = event.getDialog();
if (dialog != NULL)
{
dialog->Show(true);
}
そして何が起こるかというと、ダイアログが空になり、プログラムがフリーズします。しかし、私がそのようなコールバック関数を使用する場合:
wxDialog *dialog = new TelemetryDialog(this);
dialog->Show();
大丈夫です。ダイアログオブジェクトのクローンを作成することを考えていましたが、それは不可能です(基本クラスのコピーコンストラクターはプライベートです)。
誰かが以前にこのようなことを試したことがありますか?これも可能ですか?