2009-08-21 20 views
7

Dobra, używając Qt, chciałbym wiedzieć, jak wykryć bieżący stan myszy w dowolnym momencie - bez a MouseEvent.Jak wykryć stan myszy w Qt bez MouseEvent

Używając QCursor :: pos(), możesz uzyskać jego pozycję, ale czy istnieje sposób na określenie bieżącego stanu przycisków?

Zasadniczo zamierzam zweryfikować stan myszy, gdy wyłącza się timer, więc nie będzie on powiązany z żadnym konkretnym MouseEvent, a więc nie ma mowy o MouseEvent do zapytania. Muszę wiedzieć, jak zapytać o stan myszy - w szczególności stan przycisków - bez konieczności MouseEvent.

Och, używam Qt 3, więc jeśli taka funkcja została dodana w Qt 4, ale nie jest w Qt 3, to mi to nie pomaga (choć nadal dobrze byłoby wiedzieć o).

Odpowiedz

1

Czy trudno jest nie używać MouseEvent? Czy możesz pośrednio używać MouseEvents?

Jeśli utworzysz zmienną binarną dla każdego przycisku i zaktualizujesz ją za pomocą naciśniętych/zwolnionych zdarzeń myszy, możesz po prostu spojrzeć na wartości odpowiednich wartości zmiennych, gdy timer się wyłączy.

+0

Nie może być związany z wydarzeniem. Mam na myśli, że gdyby istniała funkcja, która dawałaby bieżący stan myszy, zwracając MouseEvent, byłoby dobrze, ale nie mogę obsługiwać zdarzenia. Muszę być w stanie po prostu zapytać o aktualny stan myszy, nie martwiąc się o to, które zdarzenia zostały lub nie zostały wystrzelone. –

+0

Dlaczego nie masz dostępu do wydarzeń? Martwisz się o wydajność? W jaki sposób Twój kod jest uruchamiany w GUI bez wysyłki ze względu na wydarzenie? – Bill

+0

To złożony system, który zdecydowanie nie jest wolny od błędów i nie mogę zagwarantować, że nie przegapię żadnych wydarzeń. Tak więc, chociaż jest ustawiony tak, że timer "powinien" wyłączać się tylko wtedy, gdy mysz znajduje się w prawidłowym stanie, muszę być w stanie sprawdzić stan myszy, kiedy się ona wyłączy, aby zagwarantować, że żadne zdarzenia nie spadły z powodu pęknięć. –

14

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

Zwraca aktualny stan przycisków myszy. Bieżący stan jest aktualizowany synchronicznie, ponieważ kolejka zdarzeń jest opróżniana ze zdarzeń , która spontanicznie zmieni stan myszy (zdarzenia QEvent::MousePress i QEvent::MouseRelease).

Należy zauważyć, że może to nie odzwierciedlać faktycznych przycisków przechowywanych na urządzeniu wejściowym podczas dzwonienia, ale raczej przycisków myszy jako ostatnio zgłoszonych w jednym z powyższych zdarzeń. Jeśli nie zostanie naciśnięty żaden przycisk myszy, zostanie zwrócone Qt::NoButton.

Edytuj: hmm, Właśnie zauważyłem, że pytasz o Qt3.3. Ta odpowiedź dotyczy Qt4 Obawiam się.

+0

Cóż, jak powiedziałem w pytaniu, nadal dobrze jest wiedzieć, czy istnieje sposób rób to w qt4, nawet jeśli nie ma w qt3.Jeśli nic więcej, mógłbym go użyć w przyszłej wersji danej aplikacji (i zawsze dobrze jest wiedzieć więcej na ten temat). Obecna wersja jest jednak w qt3, więc jeśli nie ma sposobu, aby to zrobić w qt3, to na razie nie mam szczęścia. Ale jeśli jest to w qt4, a nie qt3, to po prostu pokazuje, że trolltech kontynuuje ulepszanie qt i uczynienie go lepszym zestawem narzędzi. –