MouseMove w QT

0

Zaczynam przygodę z QT Creator, próbuję stworzyć prostą aplikację, jedna forma i kod w C++.

Zauważyłem, że zeby do widgetu podpiąć zdarzenie, należy kliknąć prawym przyciskuem i kliknąc "Przejdź do slotu" i wybrać zdarzenie.

Natomiast nie ma zdarzenia "MouseMove" (reakcja na ruch myszki ponad kontrolką). W jaki sposób podpiąć takie zdarzenie?

0

Na początek zapoznaj się z postem w temacie: http://4programmers.net/Forum/C_i_C++/202286-qt_pierwsze_kroki_w_programowaniu?p=869661#id869661

QT to nie Qt...

Nie wiem jak to wyklikać, ale żeby to zaprogramować zapoznaj się z:

http://doc.qt.nokia.com/4.7-snapshot/qwidget.html#mouseMoveEvent
http://doc.qt.nokia.com/4.7-snapshot/qwidget.html#mouseTracking-prop
http://doc.qt.nokia.com/4.7-snapshot/qmouseevent.html

Podpowiem, że do należy subclassować kontrolkę, dla której chcesz napisać mouseMoveEvent.

0

Za tzw. hover nie odpowiada mouseMoveEvent tylko enterEvent i leaveEvent, nazwy oczywiste i zdarzenia im odpowiadajace tez. Wystarczylo wejsc w dokumentacje i jak na widelcu jest wszystko opisane.

http://doc.qt.nokia.com/4.7-snapshot/qwidget.html#enterEvent
http://doc.qt.nokia.com/4.7-snapshot/qwidget.html#leaveEvent

0

Odpowiada,nie wprowadzaj Bracie Krycho człowieka w błąd.
Enter i leave to dodatkowe zdarzenia wywoływane na wejście i opuszczenie obszaru przez kursor.
Ale,sama reimplementacja moveEventu nie wystarczy,musisz jeszcze włączyć mouse tracking (jeśli ma śledzić ruch bez wciśniętego któregoś z przycisków myszy)
No i powstaje pytanie,co ty dokładnie chcesz uzyskać - jak tylko dowiedzenie się,że ktoś najechał myszą nad kontrolkę to wtedy faktycznie wystarczy sam enterEvent

0

enter i leave to nie to samo co move... enter wykonuje się tylko raz, leave też tylko raz, a move przy każdym poruszeniu myszką.

// ech ubiegł mnie @MasterBLB :D

To dorzucam przykład użycia MouseMove naszkicowany w PyQt.
Moduł startowy to mainWindowImplementation.py - od niego zaczynamy program - uruchamiamy w interpreterze python'a, zawiera większość "własnej implementacji".
Interesujące Cię linijki to:

		self.pushButton.setMouseMoveFunction(self.mmoveF)
		self.pushButton.setMouseTracking(True)
		
	def mmoveF(self,pos):
		self.lineEdit.setText(u"Ruch!!! %d, %d"%(pos[0],pos[1]))

pushButtonSub.py obiekt QPushButton z nadpisanym kodem zdarzenia mouse move.
mainWindow to sam kod GUI z QtDesignera, zmieniony tam został tylko QPushButton na własną subklasę PushButton.

Analogicznie można to oczywiście załatwić w C++. Jednak w Pythonie mi się szybciej prototypuje ;)

0

Głównie mi o przemieszczanie myszki na elemencie.

Na przykład chcąc napisać prymitywnego painta w okienku byłby element wyświetlający bitmapę, element musiałby rejestrować wciśnięcia i puszczenia myszki oraz na ruch myszki w obrębie tego elementu z przekazaniem współrzędnych wskaźnika.

0

No to moveEvent() cię interesuje,i to nawet bez mouseTracking nastawionego na true

1 użytkowników online, w tym zalogowanych: 0, gości: 1