Ich möchte in einer QGraphicsScene svg-Bilder verwenden.
Mit einem QSvgRenderer und scene.addItem() funktioniert das auch ganz gut.
Allerdings möchte ich nun folgendes:
Ich möchte ein QGraphicsObject erstellen und in diesem dann wiederum ein QGraphicsSvgItem. Das QGraphicsObject is dann praktisch die "Kontrolleinheit" in der ich alle veränderungen an dem Svg-Bild vornehme (möchte ich nicht in der Scene-Datei reinschreiben).
Nun haut das aber irgendwie nicht hin... das Bild sollte geladen werden (derselbe aufruf funktioniert auch in der main.cpp in der die Scene erstellt wird).
Code: Alles auswählen
renderer = new QSvgRenderer(QString(QCoreApplication::applicationDirPath() + "/Bilder/zeigerV.svg"));
picture = new QGraphicsSvgItem();
picture->setSharedRenderer(renderer);
hier die Klasse in der ich das SvgItem erstelle:
die .h:
Code: Alles auswählen
#ifndef FRONT_H
#define FRONT_H
#include <QGraphicsSVGItem>
#include <QSvgRenderer>
#include <QGraphicsItem>
#include <QCoreApplication>
class Front : public QGraphicsObject
{
public:
Front(QGraphicsItem *parent = 0);
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
private:
QGraphicsSvgItem *picture;
QSvgRenderer *renderer;
};
#endif // FRONT_H
Code: Alles auswählen
#include "front.h"
Front::Front(QGraphicsItem *parent)
: QGraphicsObject(parent)
{
renderer = new QSvgRenderer(QString(QCoreApplication::applicationDirPath() + "/Bilder/zeigerV.svg"));
picture = new QGraphicsSvgItem();
picture->setSharedRenderer(renderer);
picture->setPos(0,0);
picture->show();
}
QRectF Front::boundingRect() const
{
return QRect(0,0,30,125);
}
void Front::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QRectF rec = boundingRect();
//painter->drawImage(0,0,*backPic);
Q_UNUSED(option);
Q_UNUSED(widget);
}
Muss ich das hier auch machen?
Ich hoffe hier kann mir jemand weiterhelfen. Die ganzen bisherigen Dokus die ich gefunden habe haben das QGraphicsSvgItem immer als Objekt erstellt und mit addItem() an die Scene übergeben. Aber das will ich ja nicht machen..