Domanda

Come faccio a rilevare se un doppio clic su un QWidget (QStatusBar, nel mio caso) ha accaduto mentre un tasto di modifica è stato tenuto premuto?

posso sovraccaricare void QWidget::mouseDoubleClickEvent ( QMouseEvent * event ) per ottenere il doppio click, ma come posso con certezza se il widget riceve gli eventi chiave quando si potrebbe non avere l'attenzione?

È stato utile?

Soluzione

Ho trovato la risposta:

QMouseEvent è derivato da QInputEvent e che ha un metodo chiamato modifiers():

Qt documentazione :

  

Restituisce i flag di modifica della tastiera che esistevano immediatamente prima si è verificato l'evento.

Altri suggerimenti

Se si dispone di uno slot per la vostra (Mouse) della corsa o del segnale, è possibile testare i modificatori c'è:

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 

Giusto per aggiungere più informazioni nel vostro QWidget avete solo bisogno di eseguire l'override di questo metodo

protected:
    void mouseDoubleClickEvent(QMouseEvent *event);

applausi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top