我有两个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

不要忘记处理背景大小以适应项目大小。

10-08 13:01