我有两个QQuickItem
,我希望在它暴露给QML之前在C ++中首先绘制一个。我想这样做是因为我希望第二个QQuickItem
(我将在这里将其称为背景QQuickItem
)作为第一个QQuickItem
的背景(我会从此处开始称为父QQuickItem
),然后在两个项目的顶部绘制QPixmap
(使用QPainter
绘制)。我还希望将第二个“background”QQuickItem
作为属性传递给第一个QQuickItem
,以便可以从QML动态设置它。有没有人知道如何做到这一点?
我想提及两个QQuickItem
都有QQuickItem::updatePaintNode()
的实现。有没有办法让它们一起工作?
答案 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
不要忘记将背景大小调整为项目大小。