Seite 1 von 1

svgrenderer

Verfasst: 18. Juni 2008 15:39
von joebar
Hallo,

ich habe ein Problem mit dem svgrenderer - platt gesagt ich Blicks einfach nicht.

finales Ziel:
eine SVG Graphik darstellen die sich mit der Fenstergröße anpasst und auf der eine andere SVG Graphik per Cursor Tasten bewegt werden kann.

momentanes Ziel:
einfach nur eine SVG Graphik darstellen und zwar mit den entsprechenden Klassen um das finale Ziel erreichen zu können.

Ich habe versucht folgendes Beispiel zu verstehen:

http://doc.trolltech.com/4.3/painting-svgviewer.html

So weit ich das verstanden habe wird in dem Beispiel eine QScrollArea mit einem QWidget verknuepft und darauf die SVG Grafik dargestellt.

Die svgRenderer Docu sagt
Using QSvgRenderer, Scalable Vector Graphics (SVG) can be rendered onto any QPaintDevice subclass, including QWidget, QImage, and QGLWidget.
Auf jedes QPaintDevice inklusive QWidget. QWidget ist doch kein QPaintdevice oder? Die APIs scheinen kein QWidget zu erlauben, in obigen Example kann ich aber kein QPaintdevice finden sondern nur QWidget. Wie ist das zu verstehen?

Also simple gesagt habe ich bisher

Code: Alles auswählen

QWidget* myCentralWidget = new QWidget();
QSvgRenderer* renderer = new QSvgRenderer(QString("/path/bubbles.svg"));
Jetzt muesste ich den QSvgRenderer irgendwie auf das QWidget drauf bekommen. Aber wie?

Danke!
J.

Re: svgrenderer

Verfasst: 18. Juni 2008 15:48
von Christian81
joebar hat geschrieben:QWidget ist doch kein QPaintdevice oder?
Laut Doku schon ... :roll:

Verfasst: 18. Juni 2008 16:55
von joebar
Danke, Frage 1 damit geklärt. Wenn jetzt noch einer ein Tipp hat wie ich das SVG auf das Widget bekomme.

Verfasst: 18. Juni 2008 17:23
von Christian81
paintEvent() überschreiben z.B.
Oder QLabel benutzen und resizeEvent() überschreiben oder ...

Verfasst: 19. Juni 2008 02:32
von joebar
ich kaufe ein "e"....


Vielleicht ist die Frage oder die Zeile Code so trivial dass keiner sieht wo mein Problem liegt.

Code: Alles auswählen


QWidget* myCentralWidget = new QWidget();
QSvgRenderer* renderer = new QSvgRenderer(QString("/path/bubbles.svg")); 
//jetzt suche ich was wie hier, was so natuerlich nicht klappt:
myCentralWidget -> setSVG(renderer);
Sprich, wie muss meine ausgedachte Funktion setSVG wirklich heissen? Auch beim QLabel haette ich das Problem, dort gibt es z.B. setPIcture aber die erwartet ein QPicture als Input und faellt damit weg.

Zusatzfrage: Mein finales Ziel im Auge (siehe OP), ist es eine gute Idee das ganze auf einem QLabel zu machen?

Danke!

Verfasst: 19. Juni 2008 06:30
von Christian81
QSvgRenderer::render()

Verfasst: 20. Februar 2009 11:35
von bp
Ich habe das ganze für meine SVG-Buttons so gelöst. Erst weise ich dem ein Bild zu, und dann über die Funktion

Code: Alles auswählen

void SvgButton::paintEvent(QPaintEvent *)
{
    int x = 0;
    int y = 0;
    QPainter p(this);
    x = (this->width() - m_iWidth) / 2;
    y = (this->height() - m_iHeight) / 2;
    p.setViewport(x, y, m_iWidth, m_iHeight);
    doc->render(&p);
}
zeichne ich einfach das SVG-Bild hinein.
Wobei doc im Constructor deklariert ist.

Code: Alles auswählen

doc = new QSvgRenderer(enable, this);
Kannst das ganze auch in der resizeEvent(...) Funktion machen.

bp