QQuickwidget 抓取窗口区域外的图像

Posted

技术标签:

【中文标题】QQuickwidget 抓取窗口区域外的图像【英文标题】:QQuickwidget grab image outside window area 【发布时间】:2015-07-21 15:58:53 【问题描述】:

这是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);

这应该从逻辑上解决窗口大小的问题,因为没有窗口。有cmets吗?

【问题讨论】:

【参考方案1】:

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

虽然工作量不大,但我仍然对不起作用的QWidget render() 方法感到困惑。

感谢大家的回复!

【讨论】:

【参考方案2】:

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

【讨论】:

我上面提到的使用 QWidget grab() 方法的代码是否会捕获整个小部件而不管小部件的大小? --好的,我现在明白了:屏幕外的部分未绘制,因此无法捕获。

以上是关于QQuickwidget 抓取窗口区域外的图像的主要内容,如果未能解决你的问题,请参考以下文章

使用 QScrollArea 和 QQuickWidget

QQuickWidget中的组件与QQuickView中的组件行为不同

如何拖动一个qquickwidget?

满意可以继续加分,MFC怎么截取指定区域的图像

在 QQuickWidget 中更新/重绘仪表

图像处理