如何在QQuickItem上绘制QQuickItem

时间:2017-06-30 14:48:04

标签: c++ qt qml qtquick2

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

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

1 个答案:

答案 0 :(得分:1)

要做到这一点,您必须使用视觉parent property(请注意,在c ++中,您使用setParentItem()parentItem()来访问它,而不是使用parent() { {1}}父母)。

如果你想拥有一个背景属性,我猜你不想让你的背景成为你项目的父级,所以你可以把自己设置为背景的父级并设置背景{{1} }到-1所以它会在你的项目背后绘制。

或者,这就是Qt Quick Controls 2所做的,你可以只画一个QObject画作,只是你背景和你的内容项的父母(QQC2控件将他们的z作为一个属性公开但你不必)。 有关灵感,您可以在此处查看QQC2的Control源代码:https://code.woboq.org/qt5/qtquickcontrols2/src/quicktemplates2/qquickcontrol.cpp.html

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