Seite 1 von 1

Probleme mit QGraphicsItem::type ()

Verfasst: 5. Dezember 2010 22:28
von Hugo
Hallo!

Ich möchte mir in einer Liste den Typ aller sich auf meiner QGraphicsScene befindlichen QGraphicsItems anzeigen lassen. Diese Items habe ich mir zum Teil selbst geschrieben und sie haben damit den type 65536 (UserType). Um sie zu unterscheiden, habe ich jedem Item einen neuen type verpasst. Leider wird dieser nicht korrekt angezeigt. Frage ich direkt, was das Item für einen type hat (mit QGraphicsItem::type () ) wird er richtig angezeigt. Frage ich dagegen, was das Item, das sich in meiner Liste befindet für einen type hat, kommt immer der UserType. Ich habe ein Minimalbeispiel erstellt, um den Sachverhalt zu verdeutlichen (3 c++-Dateien in Projekt.rar).

1. Warum tut Qt das?

2. Wie kann ich Qt dazu bewegen, mir den type der Items aus der
Liste korrekt anzuzeigen?

Vielen Dank für eure Antworten.


Zur Sicherheit hier nochmal der ganze Code:

Objekt.h

Code: Alles auswählen

#ifndef OBJEKT_H
#define OBJEKT_H

#include <QGraphicsItem>

class Objekt : public QGraphicsItem
{
public:
    QRectF boundingRect() const;
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
               QWidget *widget);

    enum { Type = 66666};
    int type()
    {
         return Type;
    }
};


#endif

Objekt.cpp

Code: Alles auswählen

#include "Objekt.h"
#include <QPainter>

QRectF Objekt::boundingRect() const
{}

void Objekt::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{} 
main.cpp

Code: Alles auswählen

#include "Objekt.h"
#include <QtGui>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QGraphicsScene scene;
    scene.setSceneRect(-300, -300, 600, 600);

    Objekt *objekt = new Objekt;
    scene.addItem(objekt);

    QString string1;
    QString string2;

    QList<QGraphicsItem *>Items = scene.items();

    foreach (QGraphicsItem *item, Items )
        {
            int a = item->type();
            string1 = QString::number(a, 10);
        }

    int b=objekt->type();
    string2=QString::number(b, 10);

    scene.addText(string1+" "+string2);

    QGraphicsView view(&scene);
    view.show();

    return app.exec();
}

Verfasst: 6. Dezember 2010 06:31
von Christian81
Du überschreibst type() falsch. type() ist const - siehe http://doc.trolltech.com/4.7/qgraphicsitem.html#type