fabietto
19th November 2007, 18:02
Hi all,
I'm experiencing a very funny problem with the Graphics View Framework (Mac OS, Qt 4.3.2, G++ 4).
I've created a very simple class, called Obstacle, that inherits from QGraphicsItem:
#ifndef OBSTACLE_H
#define OBSTACLE_H
#include <QGraphicsItem>
class Obstacle : public QObject, public QGraphicsItem {
Q_OBJECT
public:
// Constructor
Obstacle(int width, int height, bool movable);
// Size
int obstacle_width, obstacle_height;
// itemChange() function
QVariant itemChange(GraphicsItemChange change, const QVariant & value);
// Shape
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
// Tooltip
QString str_obstacle_tooltip;
signals:
void dragged();
};
#endif
Since I need to use a lot of objects belonging to this class, I've chosen to create a couple of dynamically allocated vectors, defined as:
Obstacle *obstacles_A[], *obstacles_B[];
Then, I create the various instances using the "new" command and I add all the object to my scene:
obstacles_A[0] = new Obstacle(130, 82, true);
obstacles_A[1] = new Obstacle(130, 82, true);
obstacles_A[2] = new Obstacle(95, 190, true);
obstacles_A[3] = new Obstacle(55, 230, true);
...
obstacles_A[12] = new Obstacle(49, 38, true);
graphScene_Scene->addItem(obstacles_A[0]);
graphScene_Scene->addItem(obstacles_A[1]);
graphScene_Scene->addItem(obstacles_A[2]);
graphScene_Scene->addItem(obstacles_A[3]);
...
graphScene_Scene->addItem(obstacles_A[12]);
obstacles_A[0]->setPos(180,44);
obstacles_A[1]->setPos(180,150);
obstacles_A[2]->setPos(408,38);
obstacles_A[3]->setPos(643,17);
...
obstacles_A[12]->setPos(275,564);
Everything works fine in this way. Except if I try to create another object (the number 13). In this case, my application compiles correctly but I get an error during the linking.
This is why I'm using also another vector (obstacles_B). Using this second vector, I'm able to create more than 13 obstacles, but the amazing thing is that, when I add to the scene the first objects belonging to the second vector, the first object belonging to the first vector disappears from the scene! If I try with a second obstacle_b object, the second obstacle_a disappears, and so on.
Even more strange, it seems that the objects of the second vector "inherits" some properties from the disappearing objects: if I select (since the obstacles are selectable) one of the obstacles_b, it appears to my application as if I'd selected an object of the obstacles_a class.
Anyone could please help me to clarify this behaviour?
Many thanks,
Fabio Ruini
I'm experiencing a very funny problem with the Graphics View Framework (Mac OS, Qt 4.3.2, G++ 4).
I've created a very simple class, called Obstacle, that inherits from QGraphicsItem:
#ifndef OBSTACLE_H
#define OBSTACLE_H
#include <QGraphicsItem>
class Obstacle : public QObject, public QGraphicsItem {
Q_OBJECT
public:
// Constructor
Obstacle(int width, int height, bool movable);
// Size
int obstacle_width, obstacle_height;
// itemChange() function
QVariant itemChange(GraphicsItemChange change, const QVariant & value);
// Shape
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
// Tooltip
QString str_obstacle_tooltip;
signals:
void dragged();
};
#endif
Since I need to use a lot of objects belonging to this class, I've chosen to create a couple of dynamically allocated vectors, defined as:
Obstacle *obstacles_A[], *obstacles_B[];
Then, I create the various instances using the "new" command and I add all the object to my scene:
obstacles_A[0] = new Obstacle(130, 82, true);
obstacles_A[1] = new Obstacle(130, 82, true);
obstacles_A[2] = new Obstacle(95, 190, true);
obstacles_A[3] = new Obstacle(55, 230, true);
...
obstacles_A[12] = new Obstacle(49, 38, true);
graphScene_Scene->addItem(obstacles_A[0]);
graphScene_Scene->addItem(obstacles_A[1]);
graphScene_Scene->addItem(obstacles_A[2]);
graphScene_Scene->addItem(obstacles_A[3]);
...
graphScene_Scene->addItem(obstacles_A[12]);
obstacles_A[0]->setPos(180,44);
obstacles_A[1]->setPos(180,150);
obstacles_A[2]->setPos(408,38);
obstacles_A[3]->setPos(643,17);
...
obstacles_A[12]->setPos(275,564);
Everything works fine in this way. Except if I try to create another object (the number 13). In this case, my application compiles correctly but I get an error during the linking.
This is why I'm using also another vector (obstacles_B). Using this second vector, I'm able to create more than 13 obstacles, but the amazing thing is that, when I add to the scene the first objects belonging to the second vector, the first object belonging to the first vector disappears from the scene! If I try with a second obstacle_b object, the second obstacle_a disappears, and so on.
Even more strange, it seems that the objects of the second vector "inherits" some properties from the disappearing objects: if I select (since the obstacles are selectable) one of the obstacles_b, it appears to my application as if I'd selected an object of the obstacles_a class.
Anyone could please help me to clarify this behaviour?
Many thanks,
Fabio Ruini