Qt: Обнаружение двойного щелчка с помощью Modkey (Shift, CTRL и т. Д.) - PullRequest
3 голосов
/ 12 февраля 2010

Как я могу определить, произошел ли двойной щелчок на QWidget (в моем случае QStatusBar), пока нажата клавиша-модификатор?

Я могу перегрузить void QWidget::mouseDoubleClickEvent ( QMouseEvent * event ), чтобы получить двойной щелчок, но как я могу убедиться, что виджет получает ключевые события, когда он может не иметь фокуса?

Ответы [ 3 ]

2 голосов
/ 12 февраля 2010

Я нашел ответ:

QMouseEvent является производным от QInputEvent и имеет метод с именем modifiers():

Из документации Qt :

Возвращает флаги модификатора клавиатуры, которые существовали непосредственно перед тем, как произошло событие.

1 голос
/ 29 июля 2013

Если у вас есть СЛОТ для вашего (мыши) события или сигнала, вы можете протестировать модификаторы там:

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 
0 голосов
/ 13 апреля 2012

Просто чтобы добавить больше информации в вашем QWidget вам нужно только переопределить этот метод

protected:
    void mouseDoubleClickEvent(QMouseEvent *event);

ура

...