svgrenderer

Alles rund um die Programmierung mit Qt
Antworten
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

svgrenderer

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: svgrenderer

Beitrag von Christian81 »

joebar hat geschrieben:QWidget ist doch kein QPaintdevice oder?
Laut Doku schon ... :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Danke, Frage 1 damit geklärt. Wenn jetzt noch einer ein Tipp hat wie ich das SVG auf das Widget bekomme.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

paintEvent() überschreiben z.B.
Oder QLabel benutzen und resizeEvent() überschreiben oder ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag 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!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

QSvgRenderer::render()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
bp
Beiträge: 44
Registriert: 21. Januar 2009 11:25

Beitrag 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
Antworten