如何在 QQuickItem 上绘制 QQuickItem
How to draw a QQuickItem on a QQuickItem
我有两个 QQuickItem
,我想在将其暴露给 QML 之前用 C++ 在另一个之上绘制一个。我想这样做是因为我希望第二个 QQuickItem
(从这里开始我将其称为背景 QQuickItem
)充当第一个 QQuickItem
(我会从这里开始称为父项 QQuickItem
),然后在两个项目的顶部绘制一个 QPixmap
(已使用 QPainter
绘制)。我还希望将第二个 "background" QQuickItem
作为 属性 传递给第一个 QQuickItem
,以便可以从 QML 动态设置它。有没有人知道如何做到这一点?
我想提一下,两个 QQuickItem
都有 QQuickItem::updatePaintNode()
的实现。有没有办法让他们一起工作?
为此,您必须使用视觉对象 parent
property(请注意,在 C++ 中,您可以使用 setParentItem()
和 parentItem()
访问它,而不是 parent()
QObject
parent).
如果你想要背景 属性,我猜你不想让你的背景作为你的项目的 parent,所以你可以将自己设置为 parent 并将背景的 z
设置为 -1,以便它绘制在您的项目后面。
或者,这就是 Qt Quick Controls 2 所做的,您可以 QQuickItem
什么都不画,只是作为背景和内容项的 parent(QQC2 控件公开其 contentItem
作为 属性 但你不必这样做)。
如需一些灵感,您可以查看 QQC2 的源代码 Control
here : https://code.woboq.org/qt5/qtquickcontrols2/src/quicktemplates2/qquickcontrol.cpp.html
不要忘记将背景大小调整为项目的大小。
我有两个 QQuickItem
,我想在将其暴露给 QML 之前用 C++ 在另一个之上绘制一个。我想这样做是因为我希望第二个 QQuickItem
(从这里开始我将其称为背景 QQuickItem
)充当第一个 QQuickItem
(我会从这里开始称为父项 QQuickItem
),然后在两个项目的顶部绘制一个 QPixmap
(已使用 QPainter
绘制)。我还希望将第二个 "background" QQuickItem
作为 属性 传递给第一个 QQuickItem
,以便可以从 QML 动态设置它。有没有人知道如何做到这一点?
我想提一下,两个 QQuickItem
都有 QQuickItem::updatePaintNode()
的实现。有没有办法让他们一起工作?
为此,您必须使用视觉对象 parent
property(请注意,在 C++ 中,您可以使用 setParentItem()
和 parentItem()
访问它,而不是 parent()
QObject
parent).
如果你想要背景 属性,我猜你不想让你的背景作为你的项目的 parent,所以你可以将自己设置为 parent 并将背景的 z
设置为 -1,以便它绘制在您的项目后面。
或者,这就是 Qt Quick Controls 2 所做的,您可以 QQuickItem
什么都不画,只是作为背景和内容项的 parent(QQC2 控件公开其 contentItem
作为 属性 但你不必这样做)。
如需一些灵感,您可以查看 QQC2 的源代码 Control
here : https://code.woboq.org/qt5/qtquickcontrols2/src/quicktemplates2/qquickcontrol.cpp.html
不要忘记将背景大小调整为项目的大小。