繁体   English   中英

QQuickImage转换为QImage

[英]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()函数。 它似乎有效。

QML

Image {
  id:imageToDecode
  MouseArea {
    anchors.fill:parent
    onClicked: parent.grabToImage(function(result)
      decoder.decodeImageQML(result); })
    }
 }

C ++

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM