Qt / QML: QImage von C ++ an QML senden und das QImage auf der GUI anzeigen
Ich habe eine Klasse erstelltPublisher
welches periodisch aQImage
Objekt.
Es fällt mir jedoch schwer, das zu zeichnenQImage
zu einem QML-Element. Es scheint, dass dieImage
undCanvas
QML-Komponenten erfordern aQUrl
anstelle einerQImage
, aber ich bin nicht sicher, wie ich meine konvertieren sollQImage
zu einemQUrl
. Edit4: Wenn ich QUrl sage, meine ich nicht, dass ich versuche, ein Bild in eine URL zu konvertieren. Das ist Unsinn. Ich möchte einen Verweis auf dieses Image generieren, das sich nicht auf der Festplatte befindet, und der Datentyp, nach dem QML-Komponenten fragen, ist eine URL.
Ich habe ein paar Nachforschungen angestellt und das herausgefundenQQuickImageProvider
bietet eine Lösung, aber ich habe keine Dokumentation gefunden, die erklärt, wie ich meine konvertiereQImage
Signal an aQUrl
das kann ich zum zeichnen benutzen. Beispielcode oder Referenzdokumentation sind willkommen.
Danke für Ihre Hilfe!
Edit1:
Ich habe hier nachgesehen:http://qt-project.org/doc/qt-5.0/qtquick/qquickimageprovider.html und ich sehe nicht, wie ich ein QImage an den Quick Image Provider übergebe und daraus eine QUrl erstelle.
Edit2. Hier ist der Header. Die Implementierung sollte nicht wichtig sein.
class Publisher
{
Q_OBJECT
public:
Publisher(QObject* parent = 0);
virtual ~Publisher(void);
Q_SIGNALS:
void newImage(const QImage& newImage);
};
Bearbeiten 3. Hier ist mein QML-Code, aber ich weiß nicht, wie ich mein QImage zeichnen soll, so dass dieser Code irgendwie bedeutungslos ist.
meine main.cpp Datei:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qmlRegisterType<Publisher>("Components", 1, 0, "Publisher");
QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/QQuickViewExample/main.qml"));
viewer.showExpanded();
return app.exec();
}
meine main.qml Datei:
import QtQuick 2.0
import Components 1.0
Rectangle {
id : testRect
width: 360
height: 360
Image{
anchors.fill: parent
id: myImage
Publisher {
id: myPub
onNewImage: {
myImage.source = newImage; #I know this doesnt work, it needs a QUrl and not a QImage
}
}
}
}