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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top