Я постепенно переносю приложение из MFC в Qt и использую для этой цели MFCMigrationFramework .
Виджет Qt, который размещен наДиалог MFC не обрабатывает такие клавиши, как Tab , Стрелки , Ввод , Esc .Проблема с Tab и стрелками была частично решена с помощью этого решения :
Я подкласс QWinWidget и сделал следующие вещи: Конструктор:
SetWindowLong(winId(), GWL_STYLE, GetWindowLong(winId(), GWL_STYLE) | WS_TABSTOP);
Переопределить winEvent:
bool winEvent(MSG *msg, long *result)
{
switch(msg->message)
{
case WM_GETDLGCODE:
*result = DLGC_WANTARROWS | DLGC_WANTTAB;
return true;
}
return __super::winEvent(msg, result);
}
Чтобы скопировать в буфер обмена, переключите представление в режим обычного текста
Это работает, за исключением одной проблемы: невозможно получить доступ к элементам управления в родительском диалоге (MFC) с помощью Клавиша Tab , фокусировка циклически выполняется только через дочерний элемент управления Qt ( первый выпуск ).
Второй выпуск : Ввод и клавиши Esc обрабатываются только родительским диалогом MFC.Например, невозможно закрыть открытое всплывающее окно со списком (расположенное в виджете Qt) нажатием клавиши Enter или Esc - вместо этого закрывается диалоговое окно ( CDialog :: OnOK или CDialog :: OnCancel
Я пробовал это
case WM_GETDLGCODE:
*result = DLGC_WANTARROWS | DLGC_WANTTAB | DLGC_WANTALLKEYS;
, но в этом случае CDialog больше не обрабатывает клавиши Esc и Enter.
Каково правильное решение, чтобы справиться с такой ситуацией?