我一直在使用QZXing来解码QR码,我的QML看起来像这样
Image{
width:300
height:300
id:imageToDecode
source:"qr.jpg"
cache: true
}
当我将它传递给C ++文件时,它必须转换为QImage类型, 在原始编码器编写的代码中
QGraphicsItem *item = qobject_cast<QGraphicsItem*>(imageObj);
然后使用QGraphicsItem构造一个QImage,但是在转换后它总是返回0,因为QGraphicsItem不继承QObject
直接转换,如
QImage*item = qobject_cast<QImage*>(imageToDecode);
不会出于同样的原因,我一直在使用
imageObj->inherits("objectName");
测试哪一个可以转换为,但我找不到 我的观点是将QML图像转换为QImage。
答案 0 :(得分:2)
如果您使用Qt5或更高版本以及QtQuick 2.0或更高版本,则无法将Image元素渲染为QGraphicsItem或与QGraphics相关的任何内容,因为从Qt5开始,QML的后端是scenegraph而不是QGraphics。 所以现在继续使用Qt5.3并且你如果在C ++中访问Image元素,它将在内部被转换为QQuickImage,但是你仍然无法从Image元素中提取图像,因为QQuickImage尚未公开。 参考。 http://qt-project.org/forums/viewthread/32767
他们现在提出的解决方案是使用QQuickImageProvider。
答案 1 :(得分:1)
我发现可能(或可能不是)解决此问题的方法。
在分配了预览源的Image中,我调用grabToImage()来创建QQuickItemGrabResult对象,然后在C ++中调用该对象上的image()函数。它似乎有效。
Image {
id:imageToDecode
MouseArea {
anchors.fill:parent
onClicked: parent.grabToImage(function(result)
decoder.decodeImageQML(result); })
}
}
QImage ImageHandler::extractQImage(QObject *imageObj,
const double offsetX, const double offsetY,
const double width, const double height)
{
QQuickItemGrabResult *item = 0;
item = qobject_cast<QQuickItemGrabResult*>(imageObj);
QImage item_image(item->image());
....
}