c++ - 如何在 QQuickItem 上绘制 QQuickItem

标签 c++ qt qml qtquick2

我有两个 QQuickItem s 并且我想在将它暴露给 QML 之前用 C++ 在另一个之上绘制一个。我想这样做是因为我想要第二个 QQuickItem (从这里开始我将其称为背景 QQuickItem)作为第一个 QQuickItem 的背景。 (从这里开始我将其称为父级 QQuickItem)然后绘制一个 QPixmap (已使用 QPainter 绘制)在两个项目之上。我也更愿意传递第二个“背景”QQuickItem作为第一个属性 QQuickItem这样它就可以从 QML 动态设置。有没有人知道如何做到这一点?

我想提一下 QQuickItemQQuickItem::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/

相关文章:

c++ - 检查数组位置是否为空/空

c++ - 我的程序的 exe 文件所需的 DLL

Qt和Jpeg插件问题

c++ - Qt 插件框架。用插件声明插件

c++ - 将 C++ 类公开给 QML

qt - QML 在 ListView 中显示的相机照片被破坏

c++ - Boost.Asio iostream 冲洗不工作?

c++ - 禁用 Qt 组合框中的项目

c++ - Q_GADGET 与用于从 QML 操作 C++ 对象的多态树的访问器对象

c++ - 具有各种访问方法的自定义数据结构