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
[gelöst] mouseMoveEvent() von QGraphicsScene löst nicht aus
[gelöst] mouseMoveEvent() von QGraphicsScene löst nicht aus
Zuletzt geändert von mathies am 30. Mai 2010 10:04, insgesamt 1-mal geändert.
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.
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.
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
Sourcefile BasisScene
Headerfile Mainscene
Sourcefile Mainscene
Wie schon gesagt. Das MoveEvent geht nicht, DoubleClick-, Wheel-, Press- usw Event gehen alle.
Grüße
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();
Code: Alles auswählen
BaseScene::BaseScene( QObject* parentView )
: QGraphicsScene( parentView )
{
setItemIndexMethod(QGraphicsScene::NoIndex);
}
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);
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");
}
Grüße