【发布时间】:2016-09-08 15:24:05
【问题描述】:
我有一个 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)
谢谢。
【问题讨论】:
-
Composition 是正确的做法 - 在视频项目之上放置另一个项目。
-
感谢@ddriver 的回复。我尝试使用 QPainter 的各种合成模式,并且我可以观察到不同模式对于使用 QImage 作为其绘图设备的画家(painter->drawImage(QRectF(....), myImage))是如何工作的。但是,对于 QGraphicsVideoItem,painter 不直接用于渲染。矩形仍然总是在下面绘制。
标签: qt