2015-07-21 35 views
0

這是續集another question在這裏,我在描述我的目標是不準確的。QQuickwidget抓取圖像外窗面積

正如在鏈接問題中提到的,我希望保存嵌入在QQuickWidget中的QML,並且它大於窗口大小。該QQuickWindowgrabWindow()方法僅捕獲窗口區域,因此我嘗試下面的代碼後,我直觀地顯示它:

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

這應該由邏輯解決窗口大小的問題,因爲沒有窗戶。任何意見?

回答

0

如果您的QML內容大於窗口大小,則不繪製不在屏幕上的部分。因此,除非使用2臺顯示器並擴展視圖,否則無法捕獲屏幕外的某些內容。最後一種方法可行。

+0

將我上面提到的利用代碼QWidget的抓()方法捕獲整個部件,無論小部件的大小? --ok,我現在明白了:屏幕外的部分沒有被繪製,因此不可能被捕獲。 – neoterryjoe

2

好的,我通過手動移動QML的窗口height解決了這個問題,並保存窗口捕獲的所有圖像並整理它以形成原始圖像。

雖然沒有太多的工作,但我仍然困惑於QWidget render()方法沒有奏效。

感謝您的回覆!

+0

是的,好主意:) – Mido