wxWidgets — немодальный wxDialog

Я создаю свой собственный подкласс wxDialog, и он хорошо работает, когда используется как немодальный диалог, например так:

AddDialog newAddDialog = new AddDialog(this, wxID_ANY, _T("Dialog Title"), wxDefaultPosition, wxDefaultSize, 0);
if (newAddDialog.ShowModal() == wxID_OK)
{
//do something
}

При использовании ShowModal () выполнение программы останавливается до тех пор, пока не будет нажата кнопка OK или Отмена. Мне нужно, чтобы диалоговое окно отображалось, но не останавливало поток графического интерфейса, поэтому я попробовал это:

AddDialog newAddDialog = new AddDialog(this, wxID_ANY, _T("Dialog Title"), wxDefaultPosition, wxDefaultSize, 0);
if (newAddDialog.Showl() == wxID_OK)
{
//do something
}

При использовании Show () диалоговое окно кратковременно появляется, а затем исчезает. Я подумал, что это может быть проблемой области видимости, поэтому я использовал указатель для newAddDialog. Затем появляется диалоговое окно, когда при нажатии кнопки «ОК» или «Отмена» диалоговое окно закрывается, но код оператора if не выполняется, даже если нажать кнопку «ОК».

Кто-нибудь знает, как поступить? Благодарю.


Дальнейшее уточнение:

У меня есть виртуальная функция void в моем подклассе Dialog, которую я переопределяю в другом классе. Я не могу заставить событие работать, когда я переопределяю, однако, если у меня есть пустота в реальном подклассе Dialog, я получаю вызов события. Кажется, это проблема перевеса, но я не знаю, в чем проблема. Это не основной графический интерфейс, который я вызываю в вызове OnInit () — может ли это быть проблемой?

1

Решение

ShowModal блокирует выполнение вашей программы и возвращает результат (например, wxID_OK). С другой стороны, Show просто показывает диалоговое окно и сразу же возвращается, поэтому вы не можете проверить результат (то, что пользователь нажал для кнопок) из его возвращаемого значения. Вместо этого вы должны сообщить результат этого диалогового окна, отправив событие из диалога или что-то в этом роде.

0

Другие решения

AddDialog newAddDialog = new AddDialog(...

Это компилируется? В самом деле?

Оператор ‘new’ возвращает указатель на void, поэтому размещенный вами код выглядит очень странно.

Обычный способ сделать это:

AddDialog * newAddDialog = (AddDialog *) new AddDialog( ...

Или же

AddDialog newAddDialog( ...
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector