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