Seite 1 von 1
[gelöst] mouseMoveEvent() von QGraphicsScene löst nicht aus
Verfasst: 28. Mai 2010 16:45
von mathies
Hallo,
ich bin gerade von Qt 4.5 auf die aktuelle Qt Version umgestiegen (VS2008). Leider gibt es da wohl einige kleine Änderungen. Ich habe eine QGraphicsScene mit einer überschriebenen mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent) Funktion.
Bei der alten Qt Version wurde das Event ausgelöst, sobald sich die Maus in der Scene bewegte. Jetzt muss ich erst ein Item "grabben", damit das Event anschlägt. Wie kann ich das denn wieder ändern?
Events wie WheelEvent, PressEvent und ReleaseEvent funktionieren ohne Probleme.
Grüße
Verfasst: 28. Mai 2010 19:45
von franzf
Hast du denn das Projekt komplett gesäubert, qmake erneut ausgeführt und komplett neu gebaut, nicht dass da ein inkompatibles Makefile oder Ojectfile rumliegt.
Ansonsten wäre etwas mehr Info bezüglich deiner Implementierung interessant. Kannst du mal die komplette scene.cpp posten? Veränderst du dann von außen nochmal das Objekt, nachdem es erstellt wurde? QGraphicsScene bietet ja doch einiges an Methoden, genauso wie QGraphicsView - da kann man viel drehen.
Verfasst: 29. Mai 2010 10:13
von mathies
Ich habe mein System neu aufgesetzt, daher überhaupt der Wechsel. Es wurde alles vom reinen Source-Code neu aufgebaut, somit schließe ich ersteres mal aus.
Da es bei mir mehrere Scenetypen geben kann, verwende ich noch eine Abstakte "BasisScene" welche von QGraphicsScene abgeleitet ist. Hier die relevanten Auszüge:
Headerfile BasisScene
Code: Alles auswählen
class BaseScene : public QGraphicsScene
{
Q_OBJECT
public:
BaseScene(QObject* parentView = 0);
virtual ~BaseScene();
Sourcefile BasisScene
Code: Alles auswählen
BaseScene::BaseScene( QObject* parentView )
: QGraphicsScene( parentView )
{
setItemIndexMethod(QGraphicsScene::NoIndex);
}
Headerfile Mainscene
Code: Alles auswählen
class MainScene : public BaseScene
{
Q_OBJECT
public:
MainScene(QObject* parentView = 0);
virtual ~MainScene();
protected:
void mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent);
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* mouseEvent);
Sourcefile Mainscene
Code: Alles auswählen
MainScene::MainScene( QObject* parentView )
: BaseScene( parentView )
{
}
void MainScene::mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent)
{
printf("moving mouse\n");
QGraphicsScene::mouseMoveEvent(mouseEvent);
}
void MainScene::mouseDoubleClickEvent( QGraphicsSceneMouseEvent* mouseEvent )
{
printf("doubleclick\n");
}
Wie schon gesagt. Das MoveEvent geht nicht, DoubleClick-, Wheel-, Press- usw Event gehen alle.
Grüße
Verfasst: 30. Mai 2010 10:03
von mathies
Hallo,
die Lösung war void setMouseTracking( bool enable ), was ich bisher im View nicht setzen musste/konnte.
Grüße