将背景图像添加到 QQuickItem
Posted
技术标签:
【中文标题】将背景图像添加到 QQuickItem【英文标题】:Adding a background image to a QQuickItem 【发布时间】:2015-08-23 00:59:55 【问题描述】:我创建了一个QPixmap
,并用QPainter
在其上绘制了较小的QPixmap
s。我想将图像用作QQuickItem
的背景。是否有捷径可寻?
【问题讨论】:
【参考方案1】:如果您的自定义项目源自QQuickItem
,您可以通过以下方式重新定义QQuickItem::updatePaintNode()
:
QSGNode *MyItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *)
QSGSimpleTextureNode *node = static_cast<QSGSimpleTextureNode *>(oldNode);
if (!node)
node = new QSGSimpleTextureNode();
QSGTexture *texture = window()->createTextureFromImage(m_pixmap.toImage());
node->setTexture(texture);
node->setRect(boundingRect());
return node;
注意:你的物品是QSGTexture *texture
的所有者,在对象销毁时别忘了删除它。
【讨论】:
谢谢!像魅力一样工作。 什么是window()
?我从QSGNode
派生并创建并使用QQuickWindow
类型的新对象。对吗?
谢谢@folibis。你能扩展你的代码来解释如何删除纹理吗?
@folibis 你能告诉我如何添加一个有一些透明部分的图像吗?
QSGTexture *texture = window()->createTextureFromImage(m_pixmap.toImage());
返回一个空指针。知道为什么吗?我在 Qt 5.10以上是关于将背景图像添加到 QQuickItem的主要内容,如果未能解决你的问题,请参考以下文章