如何在 QQuickItem 上绘制 QQuickItem

How to draw a QQuickItem on a QQuickItem

本文关键字:QQuickItem 绘制      更新时间:2023-10-16

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

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

为此,您必须使用 visual parent 属性(请注意,在 c++ 中,您可以使用 setParentItem()parentItem() 访问它,而不是parent()用于QObject父级(。

如果你想要一个背景属性,我想你不希望你的背景作为你的项目的父级,所以你可以将自己设置为背景的父级,并将背景的z设置为 -1,以便它在你的项目后面绘制。

或者,这就是Qt快速控件2所做的,你可以有一个QQuickItem什么都不画,只是你的背景和内容项的父级(QQC2控件将其contentItem公开为属性,但你不必这样做(。 为了获得一些灵感,你可以在这里查看QQC2 Control的源代码:https://code.woboq.org/qt5/qtquickcontrols2/src/quicktemplates2/qquickcontrol.cpp.html

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