当我尝试使用Item::grabToImage() qml方法时,我遇到了问题。无论我指向哪一项,它总是指出以下错误:
grabToImage:项目的窗口不可见
我也尝试使用名为rect的root/toplevel项,但它没有起作用。
我的目标是:我想要捕捉一个矩形大小的图像,并在其上绘制贴图和多边形。
下面是一个最小的可重复的例子
import QtQml 2.2
import QtLocation 5.9
import QtPositioning 5.9
import QtQuick 2.0
import QtQuick.Controls 2.4
Item {
id: rect
width: 1024
height: 768
visible: true
Plugin {
id: mapPlugin
name: "osm"
}
Map {
id: map
enabled: true
visible: true
parent: rect
gesture.enabled: true
anchors.fill: parent
plugin: mapPlugin
zoomLevel: 14
activeMapType: supportedMapTypes[3]
}
Item {
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: 10
height: 40
Button {
id: saveToDisk
text: qsTr("Pick")
onClicked: {
map.grabToImage(function (result) {
console.log('saving to disk..')
result.saveToFile("pick.png")
})
}
}
}
}#include <QApplication>
#include <QQmlApplicationEngine>
#include <QtQuickWidgets/QQuickWidget>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
QQuickWidget *q = new QQuickWidget;
q->setResizeMode(QQuickWidget::SizeRootObjectToView);
q->setSource(QUrl("main.qml"));
q->show();
return app.exec();
}发布于 2019-12-27 15:35:27
QQuickWidget用于绘画的策略是创建一个屏幕外QQuickWindow,该QQuickWindow将屏幕截图从其中呈现到小部件上。上述限制了grabToImage()的使用,因为此方法要求项目的QQuickWindow是可见的。
解决方案是使用QQuickView + QWidget::createWindowContainer()
#include <QApplication>
#include <QWidget>
#include <QQuickView>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
QQuickView *q = new QQuickView;
q->setResizeMode(QQuickView::SizeRootObjectToView);
q->setSource(QUrl("main.qml"));
QWidget * container = QWidget::createWindowContainer(q);
container->show();
return app.exec();
}https://stackoverflow.com/questions/59459761
复制相似问题