Im tring to update a qml Image URL via signal:
This is working perfectly fine when executed in this method:
void Sentinel::startQmlEngine()
{
QQmlApplicationEngine qmlEngine;
qmlRegisterType<ImageItem>("ImageItem",1,0,"ImageItem");
qmlEngine.rootContext()->setContextProperty("imageUrlClass", &image);
QQmlComponent component(&qmlEngine, "qrc:/main.qml");
object = component.create();
assert(object);
image.setUrl(getPathToImage());
}
void Sentinel::startQmlEngine()
{
QQmlApplicationEngine qmlEngine;
qmlRegisterType<ImageItem>("ImageItem",1,0,"ImageItem");
qmlEngine.rootContext()->setContextProperty("imageUrlClass", &image);
QQmlComponent component(&qmlEngine, "qrc:/main.qml");
object = component.create();
assert(object);
image.setUrl(getPathToImage());
}
To copy to clipboard, switch view to plain text mode
As soon as I outsource setting the URL the signal is not emitted
void Sentinel::updateGui()
{
image.setUrl(getPathToImage());
}
void Sentinel::updateGui()
{
image.setUrl(getPathToImage());
}
To copy to clipboard, switch view to plain text mode
How can this be?
Here my Qml
import QtQuick 2.12
import QtQuick.Window 2.12
import ImageItem 1.0
Rectangle {
width: 768
height: 576
Connections {
target: imageUrlClass
onUrlChanged: {
image.update();
console.log("image UURL-" + imageUrlClass.imageUrl);
}
}
Image {
id: image
objectName: "image"
x: 0
y: 0
width: 768
height: 576
source: imageUrlClass.imageUrl
opacity: 1
clip: true
fillMode: Image.PreserveAspectFit
cache: false
}
}
import QtQuick 2.12
import QtQuick.Window 2.12
import ImageItem 1.0
Rectangle {
width: 768
height: 576
Connections {
target: imageUrlClass
onUrlChanged: {
image.update();
console.log("image UURL-" + imageUrlClass.imageUrl);
}
}
Image {
id: image
objectName: "image"
x: 0
y: 0
width: 768
height: 576
source: imageUrlClass.imageUrl
opacity: 1
clip: true
fillMode: Image.PreserveAspectFit
cache: false
}
}
To copy to clipboard, switch view to plain text mode
ImageItem class header:
#pragma once
#include <QQuickPaintedItem>
//---------------------------------------------------------------------------
class ImageItem: public QQuickPaintedItem
{
Q_OBJECT
Q_PROPERTY(QVariant imageUrl READ getUrl
() WRITE setUrl NOTIFY urlChanged
)
public:
explicit ImageItem(QQuickItem *parent = nullptr);
signals:
void urlChanged();
private:
};
#pragma once
#include <QQuickPaintedItem>
//---------------------------------------------------------------------------
class ImageItem: public QQuickPaintedItem
{
Q_OBJECT
Q_PROPERTY(QVariant imageUrl READ getUrl() WRITE setUrl NOTIFY urlChanged)
public:
explicit ImageItem(QQuickItem *parent = nullptr);
virtual void paint(QPainter* painter);
QVariant getUrl() const;
void setUrl(const QVariant &value);
signals:
void urlChanged();
private:
QVariant url;
};
To copy to clipboard, switch view to plain text mode
And Cpp:
#include "ImageItem.h"
//---------------------------------------------------------------------------
ImageItem::ImageItem(QQuickItem *parent) :
QQuickPaintedItem(parent)
{
}
{
return url;
}
void ImageItem
::setUrl(const QVariant &value
) {
url = value;
emit urlChanged();
}
void ImageItem
::paint(QPainter* painter
) {
paint(painter);
}
#include "ImageItem.h"
//---------------------------------------------------------------------------
ImageItem::ImageItem(QQuickItem *parent) :
QQuickPaintedItem(parent)
{
}
QVariant ImageItem::getUrl() const
{
return url;
}
void ImageItem::setUrl(const QVariant &value)
{
url = value;
emit urlChanged();
}
void ImageItem::paint(QPainter* painter)
{
paint(painter);
}
To copy to clipboard, switch view to plain text mode
Thanks!
Bookmarks