Qt Graphics,向前或向后移动对象

时间:2018-05-27 21:57:33

标签: c++ qt qt5 qgraphicsview

我有两个对象:CQWater和CQTank。如果他的位置相同,我的CQTank将会消失。我该怎么做才能让坦克前进。

CQWater::CQWater( QGraphicsScene *scena )
{
    // drew the rect
       setPixmap(QPixmap(":/new/prefix1/images/woda.png"));
       setTransformOriginPoint(50,50);
       setRotation(180);

 woda = new CWater();
 setPos(woda->x, woda->y);
 scena->addItem(this);

}

TANK:

CQTank::CQTank( QGraphicsScene *scena )
{
     czolg = new CTank();
     setPos(czolg->x, czolg->y);
     scena->addItem(this);
}


QRectF CQTank::boundingRect() const
{
    qreal adjust = 0.5;
    return QRectF(-18 - adjust, -22 - adjust,
                  36 + adjust, 60 + adjust);
}


QPainterPath CQTank::shape() const
{
   QPainterPath path;
   path.addRect(-10, -20, 20, 40);
   return path;
}


void CQTank::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->setBrush(Qt::yellow);
    painter->drawEllipse(-10, -10, 20, 20);
}

我不知道如何向前或向后移动物体。

1 个答案:

答案 0 :(得分:1)

你必须使用Z值属性,docs说:

  

void QGraphicsItem :: setZValue(qreal z)

     

将项目的Z值设置为z。 Z值决定堆叠   兄弟(邻近)物品的顺序。高Z值的兄弟项目   将始终绘制在具有较低Z的另一个兄弟项目之上   值。

     

如果您恢复Z值,则项目的广告订单将决定其值   堆叠顺序。

     

Z值不会以任何方式影响项目的大小。

     

默认Z值为0.

相对于另一个更大,它将在上面显示,否则它将在下面。