2009-08-21 7 views
7

De acuerdo, usando Qt, me gustaría saber cómo detectar el estado actual del mouse en cualquier momento - sin a MouseEvent.Cómo detectar el estado del mouse en Qt sin MouseEvent

Usando QCursor :: pos(), puede obtener su posición, pero ¿hay alguna forma de determinar el estado actual de los botones?

Básicamente, estoy buscando para verificar el estado del mouse cuando se apaga un temporizador, por lo que no estará relacionado con ningún evento MouseEvent en particular, por lo que no hay MouseEvent para consultar. Necesito saber cómo consultar el estado del mouse, en particular el estado de los botones, sin tener MouseEvent.

Ah, y estoy usando Qt 3, entonces si tal función se ha agregado en Qt 4 pero no está en Qt 3, no me sirve de mucho (aunque aún sería bueno saberlo)

Respuesta

1

¿Es un requisito difícil que no utilice MouseEvent? ¿O puede usar MouseEvents indirectamente?

Si crea una variable booleana para cada botón y la actualiza con eventos presionados/liberados por el mouse, entonces podría simplemente mirar los valores de los booleanos relevantes cuando el temporizador se apaga.

+0

No puede estar relacionado con eventos. Quiero decir, si hubiera una función que le diera el estado actual del mouse al devolver un evento MouseEvent, estaría bien, pero no puedo manejar un evento. Tengo que poder simplemente consultar el estado actual del mouse sin tener que preocuparme por qué eventos se han disparado o no. –

+0

¿Por qué no tienes acceso a los eventos? ¿Estás preocupado por el rendimiento? ¿Cómo se ejecuta su código en una GUI sin despacho debido a un evento? – Bill

+0

Es un sistema complejo que definitivamente no está libre de errores, y no puedo garantizar que no voy a perder ningún evento. Entonces, mientras está configurado para que el temporizador _debería activarse solo cuando el mouse está en el estado correcto, necesito poder verificar el estado del mouse cuando se apaga para garantizar que ningún evento haya pasado por alto. –

14

Qt::MouseButtons QApplication::mouseButtons() [static]:

devuelve el estado actual de los botones del ratón. El estado actual de se actualiza de forma sincrónica ya que la cola de eventos se vacía de los eventos que cambiarán espontáneamente el estado del mouse (QEvent::MousePress y QEvent::MouseRelease eventos).

Cabe señalar que esto puede no reflejar los botones reales en el dispositivo de entrada en el momento de la llamada, sino los botones del mouse como informados por última vez en uno de los eventos anteriores. Si no hay botones del mouse retenidos, se devuelve Qt::NoButton.

Edit: hmm, me acabo de dar cuenta de que preguntaste sobre Qt3.3. Esta respuesta se aplica a Qt4, me temo.

+0

Bueno, como dije en la pregunta, todavía es bueno saber si hay alguna manera de hazlo en qt4 incluso si no está en qt3.Si nada más, podría usarlo en una versión futura de la aplicación en cuestión (y siempre es bueno saber más sobre ese tipo de cosas). La versión actual, sin embargo, está en qt3, así que a menos que haya una manera de hacerlo en qt3, entonces no tengo suerte por el momento. Pero si está en qt4 y no en qt3, eso solo demuestra que trolltech continúa mejorando qt y lo convierte en un mejor juego de herramientas. –

Cuestiones relacionadas