如何在 QQuickItem 上绘制 QQuickItem

How to draw a QQuickItem on a QQuickItem

我有两个 QQuickItem,我想在将其暴露给 QML 之前用 C++ 在另一个之上绘制一个。我想这样做是因为我希望第二个 QQuickItem(从这里开始我将其称为背景 QQuickItem)充当第一个 QQuickItem(我会从这里开始称为父项 QQuickItem),然后在两个项目的顶部绘制一个 QPixmap(已使用 QPainter 绘制)。我还希望将第二个 "background" QQuickItem 作为 属性 传递给第一个 QQuickItem ,以便可以从 QML 动态设置它。有没有人知道如何做到这一点?

我想提一下,两个 QQuickItem 都有 QQuickItem::updatePaintNode() 的实现。有没有办法让他们一起工作?

为此,您必须使用视觉对象 parent property(请注意,在 C++ 中,您可以使用 setParentItem()parentItem() 访问它,而不是 parent() QObject parent).

如果你想要背景 属性,我猜你不想让你的背景作为你的项目的 parent,所以你可以将自己设置为 parent 并将背景的 z 设置为 -1,以便它绘制在您的项目后面。

或者,这就是 Qt Quick Controls 2 所做的,您可以 QQuickItem 什么都不画,只是作为背景和内容项的 parent(QQC2 控件公开其 contentItem 作为 属性 但你不必这样做)。 如需一些灵感,您可以查看 QQC2 的源代码 Control here : https://code.woboq.org/qt5/qtquickcontrols2/src/quicktemplates2/qquickcontrol.cpp.html

不要忘记将背景大小调整为项目的大小。