Qt:Обнаружение двойного щелчка с помощью клавиши Modkey (Shift, CTRL и т.д.)
-
20-09-2019 - |
Вопрос
Как я могу определить, произошел ли двойной щелчок по QWidget (в моем случае QStatusBar), когда была нажата клавиша-модификатор?
Я могу перегружать void QWidget::mouseDoubleClickEvent ( QMouseEvent * event )
чтобы получить двойной щелчок, но как я могу убедиться, получает ли виджет ключевые события, когда он может не иметь фокуса?
Решение
Я нашел ответ:
QMouseEvent
является производным от QInputEvent
и у этого есть метод, называемый modifiers()
:
Из Документация Qt:
Возвращает флаги модификатора клавиатуры, которые существовали непосредственно перед тем, как произошло событие.
Другие советы
Если у вас есть СЛОТ для вашего события или сигнала (Мыши), вы можете протестировать модификаторы там:
Qt::KeyboardModifiers modifiers = QApplication::queryKeyboardModifiers ();
if(modifiers.testFlag( Qt::ControlModifier )){
qDebug() << "CTRL was hold when this function was called";
}
else{
qDebug() << "CTRL wasn't hold";
}
//SHIFT = Qt::ShiftModifier
//CTRL = Qt::ControlModifier
//ALT = Qt::AltModifier
Просто чтобы добавить больше информации в вашем QWidget вам нужно только переопределить этот метод
protected:
void mouseDoubleClickEvent(QMouseEvent *event);
ваше здоровье