QQuickwidget抓取窗外区域的图像

时间:2015-07-21 15:58:54

标签: qt qml qtquick2 qquickwidget

这是another question的续集,其中我在描述目标时并不准确。

如链接问题所述,我希望保存一个嵌入QQuickWidget的QML,它大于窗口大小。 QQuickWindow grabWindow()方法仅捕获窗口区域,因此我在视觉上显示后尝试了以下代码:

QQuickWidget* content..
content->setSource(QUrl("qml:/main.qml"));
QPixmap *pm = content->grab(QRect(QPoint(0,0),QSize(-1,-1));
pm->save("someFilename.png", 0, 100);

因此,绝对不是渲染后保存图像的问题。使用过的QML代码只是普通的Rectangle。上一个问题中提出的解决方案只能抓住窗口内的内容。

有什么建议吗?谢谢! :)

附录:

我尝试过以下但没有奏效:

QImage paintdev(largeWidth, largeHeight, QImage:Format_RBG32);
content->render(paintdev, QPoint(0,0), QRegion(QRect(0,0,largeWidth, largeHeight), QWidget::DrawChildren);
paintdev.save(fileName, 0, 100);

这应该通过逻辑解决窗口大小的问题,因为没有窗口。有什么意见吗?

2 个答案:

答案 0 :(得分:2)

好的,所以我通过手动将QML移动到窗口height来解决它并保存窗口捕获的所有图像并整理它以形成原始图像。

虽然没有太多的工作,但我仍然被QWidget render()方法弄糊涂了。

感谢所有回复!

答案 1 :(得分:0)

如果您的QML内容大于窗口大小,则不会绘制屏幕外的部分。因此,除非您使用2个监视器并扩展视图,否则无法从屏幕上捕获某些内容。最后一种方法可行。