问:如何在QGraphicsVideoItem上绘制QRect?

时间:2015-11-14 00:50:03

标签: qt

我有一个QGraphicsObject的子类。在本课程中,我使用QMediaPlayer和QGraphicsVideoItem来播放视频。我想在视频之上画画。

class MyClass : public QGraphicsObject
{
Q_OBJECT;

public slots:
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);

public:
    QGraphicsVideoItem *_movie_item;
    QMediaPlayer *_movie_player;
}

在paint方法中,我想在_movie_item的顶部上绘制一个红色矩形。为了尝试这样做,我打电话给:

void MyClass::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
    _movie_item->setVisible(true);
    _movie_item->play();
    painter->fillRect(startx, starty, size, size, Qt::red);
}

红色矩形在适当的位置绘制,但它总是在_movie_item下面。

有没有办法在_movie_item上绘制一个矩形而不创建另一个QGraphicsItem,如:

QGraphicsRectItem *_rect = new QGraphicsRectItem(_movie_item)

感谢。

1 个答案:

答案 0 :(得分:0)

使用QGraphicsItem::ItemStacksBehindParent标志可能会有所帮助。

From the docs:

  

该项目位于其父项后面。默认情况下,子项是   堆叠在父项的顶部。但是设置这个标志,孩子   将叠加在它后面。此标志对投影效果很有用   以及遵循父项几何的装饰对象   没有画在上面。这个标志是在Qt 4.5中引入的。

_movie_item->setFlag(QGraphicsItem::ItemStacksBehindParent);