我有两个 QQuickItem
s 并且我想在将它暴露给 QML 之前用 C++ 在另一个之上绘制一个。我想这样做是因为我想要第二个 QQuickItem
(从这里开始我将其称为背景 QQuickItem
)作为第一个 QQuickItem
的背景。 (从这里开始我将其称为父级 QQuickItem
)然后绘制一个 QPixmap
(已使用 QPainter
绘制)在两个项目之上。我也更愿意传递第二个“背景”QQuickItem
作为第一个属性 QQuickItem
这样它就可以从 QML 动态设置。有没有人知道如何做到这一点?
我想提一下 QQuickItem
有 QQuickItem::updatePaintNode()
的实现.有没有办法让它们协同工作?
最佳答案
为此,您必须使用视觉 parent
property (请注意,在 C++ 中,您使用 setParentItem()
和 parentItem()
访问它,而不是用于 QObject 的
父级)。parent()
如果你想有一个背景属性,我猜你不想让你的背景作为你的项目的父级,所以你可以改为将自己设置为背景的父级并设置背景的 z
设置为 -1,以便它在您的项目后面绘制。
或者,这就是 Qt Quick Controls 2 所做的,您可以让 QQuickItem
不绘制任何内容,而只是作为背景和内容项的父项(QQC2 控件公开其 contentItem
作为属性,但您不必这样做)。
如需一些灵感,您可以查看 QQC2 的源代码 Control
这里:https://code.woboq.org/qt5/qtquickcontrols2/src/quicktemplates2/qquickcontrol.cpp.html
不要忘记将背景调整为项目的大小。
关于c++ - 如何在 QQuickItem 上绘制 QQuickItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44849213/