我有两个QQuickItem,我想在C++中画一个放在另一个上面,然后再暴露给QML。我之所以这样做,是因为我希望第二个QQuickItem (从现在起我将其称为背景QQuickItem )作为第一个QQuickItem (从现在起我将其称为父QQuickItem )的背景,然后在两个项目的顶部绘制一个QPixmap (已使用QPainter绘制)。我还希望将第二个“后台”QQuickItem作为属性传递给第一个QQuickItem,这样就可以从QML中动态设置它。有谁知道该怎么做吗?
我想提一下,这两个QQuickItem都有QQuickItem::updatePaintNode()的实现。有没有办法让他们一起工作?
发布于 2017-06-30 23:11:51
为此,您必须使用可视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
不要忘了根据项目的大小来调整背景的大小。
https://stackoverflow.com/questions/44849213
复制相似问题