QQuickwidget захватывает изображение за пределами окна

Это продолжение другого вопроса, в котором я неточно описывал свою цель.

Как упоминалось в связанном вопросе, я хочу сохранить QML, встроенный в QQuickWidget, и он больше размера окна. Метод 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);

По логике это должно решить проблему размера окна, поскольку окна нет. Любые комментарии?


person neoterryjoe    schedule 21.07.2015    source источник


Ответы (2)


Хорошо, поэтому я решил это, вручную сдвинув QML на окно height и сохранив все изображения из снимков окна и сопоставив их, чтобы сформировать исходное изображение.

Не так уж и много работы, но я все еще озадачен методом QWidget render(), который не сработал.

Спасибо за все отклики!

person neoterryjoe    schedule 22.07.2015

Если ваш QML-контент больше размера окна, часть, которая находится за пределами экрана, не рисуется. Следовательно, невозможно захватить что-то за пределы экрана, если вы не используете 2 монитора и не расширяете представление. Этот последний подход будет работать.

person Mido    schedule 21.07.2015
comment
Будет ли мой вышеупомянутый код, использующий метод захвата QWidget(), захватывать весь виджет независимо от размера виджета? --ok, теперь я понимаю: часть за пределами экрана не нарисована и, следовательно, не может быть захвачена. - person neoterryjoe; 22.07.2015