Qt: 如何在QGraphicsVideoItem上绘制QRect?

Qt: How to draw a QRect on top of a QGraphicsVideoItem?

提问人:Silverness 提问时间:11/14/2015 最后编辑:Silverness 更新时间:9/8/2016 访问量:625

问:

我有一个QGraphicsObject的子类。在这门课中,我使用带有 QGraphicsVideoItem 的 QMediaPlayer 来播放视频。我正在尝试在视频的顶部画画。

class MyClass : public QGraphicsObject
{
Q_OBJECT;

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

public:
    QGraphicsVideoItem *_movie_item;
    QMediaPlayer *_movie_player;
}

在绘画方法中,我想在_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下方。

有没有办法在不创建另一个QGraphicsItem的情况下在_movie_item顶部绘制矩形,例如:

QGraphicsRectItem *_rect = new QGraphicsRectItem(_movie_item)

谢谢。

Qt的

评论

1赞 dtech 11/14/2015
构图是正确的方法 - 在视频项目之上放置另一个项目。
0赞 Silverness 2/17/2016
感谢您的回复@ddriver。我尝试使用QPainter的各种构图模式,我可以观察到不同的模式如何为使用QImage作为其绘画设备的画家工作(painter->drawImage(QRectF(....), myImage))。但是,对于QGraphicsVideoItem,画家不直接用于渲染。矩形仍始终绘制在下面。

答:

2赞 erdinc 9/8/2016 #1

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

从文档中:

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

_movie_item->setFlag(QGraphicsItem::ItemStacksBehindParent);