Да, примерно такая схема
Так. А что значит QAction ворует события? У тебя на одни клавиши назначены несколько действий?
Есть и несколько действий, есть и такие, где нет других действий, но при отсутствии фокуса на виджете, я бы не хотел их обратаывать.
Можешь вот этот момент поподробнее расписать, например: Есть две кнопки А, В при нажатии Ctrl + A должно срабатывать действие А, но только в случае если фокус у копки А, во всех остальных случаях должно выполняться действие В Не уверен, что смогу тебе чем-то помочь, но поставленный так вопрос быстрее найдет ответ.
Все так, только фокус не у кнопоки, а у виджета, на котором она находится. Кнопки может и не быть, просто шорткат через QAction с родителем в виде виджета
грубо говоря: auto widget = new QWidget(); auto action = new QAction(widget); action->setShortcut(Qt::CTRL + Qt::Key_A); connect(action, &QAction::triggered, this, [&action](){ auto widget = qobject_cast<QWidget *>(action->parent()); if(widget != nullptr && widget->hasFocus()){ functionA(); } }); Если с лямдой не устраивает, то action можно получить из sender();
Спасибо за пример, я думал что-то вроде такого написать, но думал может есть покрасивее решения
Да... Но при таком подходе QKeyEvent смотрится более правильным подходом, так-как отработает только когда виджет в фокусе по умолчанию😂
Обсуждают сегодня