heute Abend möchte ich euch mal wieder mit einer Qt-Anfängerfrage beglücken.
Wie soll ein ordentliches mouseMoveEvent ausschauen?
Ich habe mein QGraphicsViewer mit setMouseTracking versehen. (einfach im QtCreator das Häkchen in den EIgenschaften des Viewers gesetzt...)
Wie muss die Methode ausschauen, damit ich am Ende einfach nur
Wo ist das Problem? Wie du an das maus_x usw. kommst? Die bekommst du aus dem Parameter in mouseMoveEvent.
Wenn es nicht das war was du wissen wolltest, stell bitte eine Frage die man beantworten kann.
meine Probleme sind folgende:
a) wie bekomme ich überhaupt ein mouseMoveEvent auf mein QGraphicsViewer hin?
b) wie komme ich an x und y?
zusätzliche Frage:
Wird dieser Event immer dann und nur dann ausgeführt, sobald sich die Maus mindestens einen Pixel auf der Fläche des GraphicsViewer bewegt?
1) mouseMoveEvent kommt - wie fast alle Events der Nutzer-Interaktion - vom Windowing system. Qt reicht das Event dann über z.B. mouseMoveEvent an das passende Widget weiter. QGraphicsView kommt auch auf diesem Weg an das Event. Man kann die Events auch selber schicken (siehe QCoreApplication -> sendEvent/pstEvent), als Anfänger solltest du davon aber nicht Gebrauch machen (müssen).
2) Doku -> QMouseEvent (kommt über den Parameter von mouseMoveEvent) - hatte ich aber schon geschrieben.
void MainWindow::mouseMoveEvent( QMouseEvent* event)
{
int xpos = (event->pos()).x();
int ypos = (event->pos()).y();
qDebug() << QString::number(xpos);
qDebug() << QString::number(ypos);
}
funktioniert:
C:\Users\Tobi\Documents\Qt\rpg03-build-desktop\..\rpg03\mainwindow.cpp:39: Fehler:invalid use of incomplete type 'struct QMouseEvent'
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui\qwidget.h:76: Fehler:forward declaration of 'struct QMouseEvent'
C:\Users\Tobi\Documents\Qt\rpg03-build-desktop\..\rpg03\mainwindow.cpp:40: Fehler:invalid use of incomplete type 'struct QMouseEvent'
c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtGui\qwidget.h:76: Fehler:forward declaration of 'struct QMouseEvent'
Was ist falsch? Wieso funktioniert dieser aus einem anderen Beispiel entnommene Code bei anderen?
Da hattest du sehr recht... so ein einfacher Fehler.
Nun klappt das ganze schon recht gut (auf dem MainWindow, nicht auf dem GraphicView). Jedoch nur, während ich die Maustaste gedrückt halte - wie kann ich dafür sorge tragen, dass mir in jedem Fall die aktuelle Mausposition angezeigt wird?
Nein, ich habe, nachdem ich es nicht hinbekommen habe, dass GraphicsView mit einem mouseMoveEvent auszustatten, die Einstellungen für das MainWindow vorgenommen. Zusätzlich habe ich die Codezeile
thuering hat geschrieben:Nein, ich habe, nachdem ich es nicht hinbekommen habe, dass GraphicsView mit einem mouseMoveEvent auszustatten, die Einstellungen für das MainWindow vorgenommen. Zusätzlich habe ich die Codezeile
Was heißt nicht hinbekommen! entweder member aufrufen oder überladen.
Ich empfehle letzteres. Dann kannst du auch die protected mouseMoveEvent-Funktion überladen und an deine (was auch immer) Bedürfnisse anpasssen.
Vergiss aber nicht die virtuelle Basisfunktion aufzurufen, wenn du bis zum MainWindow Events abfangen willst. Btw. dürfte "MainWindow::setMouseTracking(true); " in 99 % der Fälle keinen Sinn machen. Mir fällt spontan jedenfalls kein Beispiel ein, wo man das Brauchen sollte.