Hey Leute,
ich versuche mich gerade neu in QT 5.2 (5.4 habe ich noch nicht für den raspi gebaut) und QML und habe das Problem das ich es nicht schaffe einen gültigen ImageProvider herzustellen. Das ganze läuft auf einem RaspberryPi und wird Cross-kompiliert.
In der main.qml habe ich ein Image erstellt und als source: "image://lastimage/ID" wie ich es auch in den Tutorials gelesen habe.
main.qml
Als nächstes habe ich einen Image Provider erstellt:
imageprovider.cpp
imageprovider.h
Und zuletzt habe ich in der main den ImageProvider der Engine hinzugefügt:
main.cpp
Das ganze lässt sich auch erfolgreich bauen, aber beim Ausführen (Debuggen) kommt die Meldung:
Habt ihr eine Idee was ich falsch mache? Ziel des ganzen ist im C++ Programm zu bestimmen, was für ein Bild die QML anzeigen soll. Habe gedacht das ich dann über Signals und Slots ein neuladen des bildes anfordern kann und so durch bestimmte Bilder durchwechsel.
Ich hoffe ihr könnt mir helfen.
Danke
Ins4ne
ich versuche mich gerade neu in QT 5.2 (5.4 habe ich noch nicht für den raspi gebaut) und QML und habe das Problem das ich es nicht schaffe einen gültigen ImageProvider herzustellen. Das ganze läuft auf einem RaspberryPi und wird Cross-kompiliert.
In der main.qml habe ich ein Image erstellt und als source: "image://lastimage/ID" wie ich es auch in den Tutorials gelesen habe.
main.qml
Code:
import QtQuick 2.2
import QtQuick.Controls 1.1
ApplicationWindow {
(...)
Image {
id: mainImage
x: 0
y: 0
width: mainwindow.width
height: this.width * 1.5
source: "image://lastimage/bild"
}
(...)
}
Als nächstes habe ich einen Image Provider erstellt:
imageprovider.cpp
Code:
#include "imageprovider.h"
#include <QQuickImageProvider>
#include <QImageReader>
#include <QTextStream>
ImageProvider::ImageProvider() : QQuickImageProvider( QQuickImageProvider::Image)
{
}
QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize)
{
QImageReader reader;
QTextStream() << id;
reader.setFileName("testbild.jpg");
QTextStream() << reader.canRead();
return reader.read();
}
imageprovider.h
Code:
#ifndef IMAGEPROVIDER_H
#define IMAGEPROVIDER_H
#include <QQuickImageProvider>
class ImageProvider : public QQuickImageProvider
{
public:
ImageProvider();
// Sobald ich diese Zeile mit aufnehme bekomme ich folgede fehlermeldung beim kompilieren:
// undefined reference to 'vtable for ImageProvider'
//QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize);
};
#endif // IMAGEPROVIDER_H
Und zuletzt habe ich in der main den ImageProvider der Engine hinzugefügt:
main.cpp
Code:
#include <QApplication>
#include <QQmlApplicationEngine>
#include "imageprovider.h"
#include "mainprocess.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
app.setOverrideCursor(Qt::BlankCursor);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
engine.addImageProvider(QString("lastimage"), new ImageProvider);
// MainProcess starten
MainProcess mainProcess;
return app.exec();
}
Das ganze lässt sich auch erfolgreich bauen, aber beim Ausführen (Debuggen) kommt die Meldung:
Code:
qrc:/main.qml:12:5: QML Image: Invalid image provider: image://lastimage/bild
Habt ihr eine Idee was ich falsch mache? Ziel des ganzen ist im C++ Programm zu bestimmen, was für ein Bild die QML anzeigen soll. Habe gedacht das ich dann über Signals und Slots ein neuladen des bildes anfordern kann und so durch bestimmte Bilder durchwechsel.
Ich hoffe ihr könnt mir helfen.
Danke
Ins4ne