QQuickImage конвертировать в 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, однако это всегда будет возвращать 0 после преобразования, так как QGraphicsItem не наследует QObject

прямое преобразование, как

QImage*item = qobject_cast<QImage*>(imageToDecode);

не будет работать по той же причине, я использовал

imageObj->inherits("objectName");

чтобы проверить, в какую из них его можно преобразовать, но я не могу найти
моя цель — конвертировать QML Image в QImage.

2

Решение

Если вы используете Qt5 или выше и QtQuick 2.0 или выше, вы не можете визуализировать элемент Image в QGraphicsItem или что-либо, связанное с QGraphics, поскольку в Qt5 бэкэнд для QML — это scenegraph, а не QGraphics.
Так что теперь перейдем к Qt5.3, и если вы получите доступ к элементу Image в C ++, он будет приведен к внутреннему QQuickImage, но вы все равно не сможете извлечь изображение из элемента Image, поскольку QQuickImage еще не был обнародован.
Ссылка http://qt-project.org/forums/viewthread/32767

Решение, которое они предложили на данный момент, заключается в использовании QQuickImageProvider.

2

Другие решения

Я нашел что-то, что может (или не может) быть решением этой проблемы.

В изображении, которому назначен источник предварительного просмотра, я вызываю 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());
....
}
1

По вопросам рекламы [email protected]