@JonB You’re right, Thanks, QGraphicsItemGroup did the trick. I just needed to set the transform origin point to the centre of the red rectangle. Now the desired effect is achieved by this code:
#include "game.h"
#include <QGraphicsItemGroup>
QGraphicsItemGroup* g = new QGraphicsItemGroup;
Game::Game()
{
player = new QGraphicsRectItem();
rectItem = new QGraphicsRectItem();
m_view = new QGraphicsView(this);
m_view->setSceneRect(QRectF(0,0,800,600));
this->setBackgroundBrush(Qt::black);
m_view->setScene(this);
m_view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_view->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
m_view->setViewportUpdateMode(QGraphicsView::NoViewportUpdate);
m_view->show();
player->setRect(0,0,100,100);
player->setBrush(Qt::red);
player->setPos(400,300);
player->setFocus();
rectItem->setRect(0,0,100,100);
rectItem->setBrush(Qt::green);
rectItem->setPos(400,330);
this->addItem(g);
player->setZValue(10);
rectItem->setZValue(1);
g->addToGroup(player);
g->addToGroup(rectItem);
g->setTransformOriginPoint(player->pos().x() + player->boundingRect().width()/2
,player->pos().y() + player->boundingRect().height()/2);
}
void Game::advance()
{
}
void Game::keyPressEvent(QKeyEvent *event)
{
switch(event->key()) {
case Qt::Key_Left :
g->moveBy(-5,0);
break;
case Qt::Key_Right :
g->moveBy(5,0);
break;
case Qt::Key_Up :
g->moveBy(0,-5);
break;
case Qt::Key_Down :
g->moveBy(0,5);
break;
case Qt::Key_Q :
g->setRotation(g->rotation()- 3);
break;
case Qt::Key_W :
g->setRotation(g->rotation() +3);
break;
}
update();
}