Qt:如何获取 QQuickItem 的快照,将其子 QQuickItems 从获取的结果中剔除
Posted
技术标签:
【中文标题】Qt:如何获取 QQuickItem 的快照,将其子 QQuickItems 从获取的结果中剔除【英文标题】:Qt : How to grab a snapshot of a QQuickItem leaving out its child QQuickItems from the grabbed result 【发布时间】:2018-07-04 22:06:49 【问题描述】:我的问题是对this discussion 的跟进。
是的。遵循grabToImage
的方式可以让我获得任何特定QQuickItem
的快照,例如下面的parent_rect
。
Rectangle
id: parent_rect
width: 400
height: 400
Rectangle
id: child_rect1
width: parent.width/4
height: parent.height/4
Rectangle
id: child_rect2
width: parent.width/4
height: parent.height/4
// ...
parent_rect.grabToImage(function(result)
result.saveToFile("something.png");
);
问题:
但是这个grabToImage
也让我得到了它所有孩子的快照,即child_rect1
和child_rect2
。
问题:
如何只获取parent_rect
的快照而不将其子项添加到返回的结果中?
【问题讨论】:
【参考方案1】:一种可能的解决方案是隐藏孩子,然后恢复可见性。
例子:
import QtQuick 2.9
import QtQuick.Window 2.2
Window
visible: true
width: 640
height: 480
title: qsTr("Hello World")
function grabWithoutChildren(item, filename)
var isVisibleList = []
var i
for(i in item.children)
isVisibleList[i] = item.children[i].visible
item.children[i].visible = false
item.grabToImage(function(result)
result.saveToFile(filename)
for(i in item.children)
item.children[i].visible = isVisibleList[i]
)
Rectangle
id: parent_rect
width: 400
height: 400
color: "red"
Rectangle
id: child_rect1
width: parent.width/4
height: parent.height/4
color: "blue"
Rectangle
id: child_rect2
x: 10
y: 10
width: parent.width/4
height: parent.height/4
color: "green"
Rectangle
x:50
y:50
width: 100
height: 100
color: "white"
Component.onCompleted: grabWithoutChildren(parent_rect, "something.png")
【讨论】:
好的。至少这是一种方式。 Qt 真的应该为 QQuickItem 类添加一个 API 来给这个层快照,而不必做太多事情。我对文档的搜索开始于期望这将是一件很正常的事情。谢谢@eyllanesc @Game_Of_Threads 应该,但好像在他们的需要内没有。我的解决方案很简单,所以我认为这就足够了。如果我帮助你,你可以给它一个赞成票或将其标记为正确:) 确定@eyllanesc以上是关于Qt:如何获取 QQuickItem 的快照,将其子 QQuickItems 从获取的结果中剔除的主要内容,如果未能解决你的问题,请参考以下文章
关闭应用程序时 QQuickItem 析构函数/changeListeners 崩溃(Qt 5.6)
如何在 C++ 端获取 QQuickItem 的 C++ 对象实例 [重复]
QQuickItem 类的 boundingRect 从哪里得到它的值?