[gelöst] mouseMoveEvent() von QGraphicsScene löst nicht aus

Alles rund um die Programmierung mit Qt
Antworten
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

[gelöst] mouseMoveEvent() von QGraphicsScene löst nicht aus

Beitrag 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
Zuletzt geändert von mathies am 30. Mai 2010 10:04, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag 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
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag von mathies »

Hallo,

die Lösung war void setMouseTracking( bool enable ), was ich bisher im View nicht setzen musste/konnte.

Grüße
Antworten