我有两个QQuickItem
,在将其暴露于QML之前,我想在C++中画一个。我想这样做是因为我希望第二个QQuickItem
(从这里开始将其称为背景QQuickItem
)充当第一个QQuickItem
(从此处开始将其称为父QQuickItem
)的背景,然后绘制在两个项目的顶部都有一个QPixmap
(已使用QPainter
绘制)。我还希望将第二个“背景” QQuickItem
作为属性传递给第一个QQuickItem
,以便可以从QML动态设置它。有人对如何执行此操作有任何想法吗?
我想提及的是,两个QQuickItem
都具有QQuickItem::updatePaintNode()
的实现。有没有办法让他们一起工作?
最佳答案
为此,您必须使用可视化的 parent
property(请注意,在c++中,您使用setParentItem()
和parentItem()
而不是parent()
父级的QObject
访问它)。
如果您想拥有背景属性,我想您不想将背景作为项目的父项,因此您可以将自己设置为背景的父项,并将背景的z
设置为-1以便绘制在您的物品后面。
或者,这就是Qt Quick Controls 2的功能,您可以使QQuickItem
不作任何画,只是作为背景和内容项的父项(QQC2控件将其contentItem
公开为属性,但您不必这样做)。
为了获得一些启发,您可以在这里查看QQC2的 Control
的源代码:https://code.woboq.org/qt5/qtquickcontrols2/src/quicktemplates2/qquickcontrol.cpp.html
不要忘记处理背景大小以适应项目大小。