[英]QQuickImage convert to QImage
我一直在用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,但是由于转换后QGraphicsItem不会继承QObject,因此它将始终返回0。
直接转换像
QImage*item = qobject_cast<QImage*>(imageToDecode);
由于相同的原因将无法工作,我一直在使用
imageObj->inherits("objectName");
测试它可以转换为哪一个,但是我找不到我要说的是将QML Image转换为QImage。
如果您使用的是Qt5或更高版本以及QtQuick 2.0或更高版本,则不能将Image元素呈现给QGraphicsItem或与QGraphics相关的任何内容,因为从Qt5开始,QML的后端是景象而不是QGraphics。 因此,现在继续使用Qt5.3,如果您在C ++中访问Image元素,它将在内部强制转换为QQuickImage,但是由于QQuickImage尚未公开,因此您仍然无法从Image元素中提取图像。 参考。 http://qt-project.org/forums/viewthread/32767
他们现在提出的解决方案是使用QQuickImageProvider。
我发现可能(或可能不是)此问题的解决方法。
在分配了预览源的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());
....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.