Qt: Detecte o clique duas vezes com o Modkey (Shift, Ctrl, etc.)
-
20-09-2019 - |
Pergunta
Como posso detectar se um clique duas vezes em um qwidget (qstatusbar, no meu caso) ocorreu enquanto uma chave de modificador foi retida?
Eu posso sobrecarregar void QWidget::mouseDoubleClickEvent ( QMouseEvent * event )
Para obter o clique duplo, mas como posso ter certeza se o widget recebe os principais eventos quando pode não ter o foco?
Solução
Eu encontrei a resposta:
QMouseEvent
é derivado de QInputEvent
E isso tem um método chamado modifiers()
:
De Documentação QT:
Retorna os sinalizadores modificadores do teclado que existiam imediatamente antes do evento ocorreu.
Outras dicas
Se você tiver um slot para o seu evento ou sinal (mouse), poderá testar os modificadores lá:
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
Apenas para adicionar mais informações em seu qwidget, você só precisa substituir este método
protected:
void mouseDoubleClickEvent(QMouseEvent *event);
Felicidades