我知道QWidget使用QPaintEngine类在屏幕上绘制,然后QPaintEngine由相应的窗口系统或绘制框架上的各种绘制引擎实现。那么,QGraphicsItem和Rectangle(在QML中)如何在Qt中进行绘画工作呢?他们也使用QPaintEngine?那么它们之间的关系是什么?
答案 0 :(得分:2)
每个QML元素都是一个QDeclarativeItem,它依次是一个QGraphicsObject,它继承自QObject和QGraphicsItem,它是放置在QGraphicsScene中的项目的基类。
QML对象也放在QDeclarativeView中,这是一个QGraphicsView。所以这些只是放在QGraphicsScene中的C ++ QGraphicsItems。因此他们使用QPainter就像其他任何东西一样。在查看在QDeclarativeRectangle类中实现的Rectangle QML组件的源代码时,这一点非常清楚。查看QDeclarativeRectangle :: paint()和QDeclarativeRectangle :: drawRect(QPainter& p)。
因此,您可以使用Qt提供的绘制引擎渲染任何这些项目或重新实现您自己的绘制引擎以使用加速硬件。