首页 > 解决方案 > Qt Graphics,向前或向后移动对象

问题描述

我有两个对象: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);

}

坦克:

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);
}

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

标签: c++qtqt5qgraphicsview

解决方案


正如文档所说,您必须使用 Z-value 属性:

无效 QGraphicsItem::setZValue(qreal z)

将项目的 Z 值设置为 z。Z 值决定同级(相邻)项目的堆叠顺序。一个 Z 值高的同级项将始终绘制在另一个 Z 值较低的同级项之上。

如果恢复 Z 值,则项目的插入顺序将决定其堆叠顺序。

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

默认 Z 值为 0。

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


推荐阅读