У меня есть приложение Qt 5.4, предназначенное для Ubuntu. Я пытаюсь заставить физическую клавишу делать то же самое, что и элемент управления на сенсорном экране. Я использую QAction. Прикосновение активируется через сигнал/слот, я пытаюсь активировать физическую клавишу с помощью action->trigger();.
В нем у меня есть родительский класс, производный от QDialog, который переопределяет событие:
class MyParentDialog : public QDialog
{
...
protected:
virtual bool event (QEvent *event);
...
}
И производный от него класс с проблемой, которая также переопределяет событие:
class MyChildDialog : public MyParentDialog
{
...
protected:
virtual bool event (QEvent *qEvent);
...
}
Реализация:
bool MyChildDialog::event (QEvent *qEvent)
{
qInfo()<<"MyChildDialog::event"<< qEvent->type();
switch (qEvent->type ())
{
case QEvent::KeyRelease:
{
QKeyEvent *keyEvt = nullptr;
keyEvt = dynamic_cast<QKeyEvent *>(qEvent);
int key = keyEvt->key();
switch(key)
{
case KEY_CH1ON:
{
qInfo()<<"MyChildDialog::event KEY_CH1ON";
bool currCheck = m_pActionRun->isChecked();
m_pActionRun->trigger();
bool afterCheck = m_pActionRun->isChecked();
qInfo()<<"MyChildDialog::event KEY_CH1ON"
<<currCheck<<afterCheck;
return true;
}
default:
return MyParentDialog::event(qEvent);
}
}
return true;
default:
return MyParentDialog::event(qEvent);
}
return true;
}
Если я закомментирую строку «m_pActionRun->trigger();», я получу все ожидаемые события (наблюдение qInfo()). Если я включу эту строку, я получу все события до первого KEY_CH1ON. После этого я получаю только события рисования. Один и тот же код действия работает, как и ожидалось, многократно, когда активируется с помощью механизма сигнала / слота сенсорного экрана.
Я довольно новичок в Qt. Я пропустил сброс триггера или что-то в этом роде?
Заранее благодарим вас за любое руководство.