Как работать с WhatsThisMode с несколькими диалогами в QT

В моем приложении Qt есть несколько диалоговых классов. Когда я нажимаю кнопку справки в заголовке диалогового окна, запускается и выполняется метод события "все диалоги". Я проверяю сQEvent::EnterWhatsThisMode независимо от того, нажата кнопка справки или нет.

Когда я тестировал метод события с помощью QEvent:WindowActivate, только метод события активного диалога выполняется должным образом. Например, когда я открываю диалоговое окно состояния, просто выводится сообщение "Состояние активировано окном", но когда я нажимаю кнопку справки в строке заголовка диалогового окна состояния, открывается ссылка диалогового окна состояния и ссылка диалогового окна сборки детали.

Также я попытался проверить, нажата ли кнопка справки с помощью QEvent:WhatsThisClicked а также QEvent::WhatsThis но не сработало.

Метод события диалогового окна PartAssemblyScreen:

bool PartAssemblyScreen::event(QEvent *e)
{
    if (e->type() == QEvent::EnterWhatsThisMode)
    {
        ShellExecute(NULL, "open", "chrome.exe", "./SimCommon/help/build/html/positioning_parts.html", NULL, SW_SHOWNORMAL);
        e->accept();
        QWhatsThis::leaveWhatsThisMode();
        
        return true;
    }
    else if (e->type() == QEvent::WindowActivate)
    {
        qDebug("part assembly Window activated ") ; 
    }
    return false;
}

Метод события StatusDialog:

bool StatusDialog::event(QEvent *e)
{
    if (e->type() == QEvent::EnterWhatsThisMode)
    {
        
        ShellExecute(NULL, "open", "chrome.exe", "./SimCommon/help/build/html/analyze.html", NULL, SW_SHOWNORMAL);
        e->accept();
        QWhatsThis::leaveWhatsThisMode();
        return true;
    }
    else if (e->type() == QEvent::WindowActivate)
    {
        qDebug("Window activated status");
    }
    return false;
}

0 ответов

Другие вопросы по тегам