Hi; this is my first question on this forum

**Situation**:
An upper class `dialog` generates a raster with squares. A player sits at (0,0) and when the user clicks on a square a pathfinding algoritm `pathFind` generates a `QString` of directions the player has to take to reach this goal. The `QString` is then converted to an array of `int`.

`dialog`calls a function from the `mysquare`class named movePlayer which should move the player in the correct direction.

*This movement should not happen instantaneous but at a certain rate which is why I'm trying to animate each movement so it takes a certain amount of time.*

My **problem** however is that the player square is not moving at all. Sometimes when I click somewhere outside of the grid it snaps to the ending position. Weird.


*MySquare class (the player)*

Qt Code:
  1. MySquare::MySquare(int x,int y, int w, int h){
  2. curX = x;
  3. curY = y;
  4.  
  5. initX = x;
  6. initY = y;
  7. width = w;
  8. height = h;
  9. posAnimation.setPropertyName("getGridPos");
  10. posAnimation.setTargetObject(this);
  11. }
  12.  
  13.  
  14. bool MySquare::movePlayer(int direction){
  15. switch (direction){
  16. case 0: //move right
  17. curX+=width;
  18. break;
  19. case 1: //move up
  20. curY+=height;
  21. break;
  22. case 2: //move left
  23. curX+=-width;
  24. break;
  25. case 3: //move down
  26. curY+=-height;
  27. break;
  28. }
  29. //setPos(curX,curY);
  30. QPoint p;
  31. p.setX(curX);
  32. p.setY(curY);
  33.  
  34. setGridPos(p);
  35. return true;
  36. }
  37.  
  38. void MySquare::setGridPos(QPoint myPos) {
  39. posAnimation.setStartValue(pos());
  40. posAnimation.setDuration(2000); // 2 seconds
  41. posAnimation.setEndValue(myPos);
  42. posAnimation.start();
  43. }
  44.  
  45.  
  46. QPoint MySquare::getGridPos() const {
  47. return pos();
  48. }
To copy to clipboard, switch view to plain text mode 


*MySquare header (the player)*

Qt Code:
  1. class MySquare : public QGraphicsObject
  2. {
  3. Q_OBJECT
  4. Q_PROPERTY(QPoint getGridPos READ getGridPos WRITE setGridPos) // define meta-property "pos"s
  5. public:
  6. QPropertyAnimation posAnimation;
  7. MySquare(int x,int y,int h, int w);
  8. QRectF boundingRect() const; //outer most edges of the object
  9. void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
  10. bool movePlayer(int direction);
  11. public slots:
  12. QPoint getGridPos() const; // getter
  13. void setGridPos(QPoint p); // setter
  14.  
  15. signals:
  16. void targetChanged(int x, int y);
  17.  
  18. private:
  19. int curX,curY,height,width,initX,initY;
  20. void mousePressEvent(QGraphicsSceneMouseEvent *event);
  21. void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
  22. void keyPressEvent(QKeyEvent *event);
  23. void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
  24. };
To copy to clipboard, switch view to plain text mode 

edit:

* I've added some qDebug inside the setGridPos which are all immediately printed; which is telling me that the script is not blocking on the animation which could be part of the problem.

* The keyboard keys are also implemented to be able to move the player using the setPos() functions which are part of QGraphicsItem. When I press a key after clicking on a square it jumps to the corrent square (plus the key i've pressed that is) so it is updating the position of the square but somehow not showing it in the gui.