Problem mit QGraphicsSvgItem

Alles rund um die Programmierung mit Qt
Antworten
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

Problem mit QGraphicsSvgItem

Beitrag von SuperSonik »

Hallo Leute,
ich habe ein Problem mit der QGraphicsSvgItem-Klasse unter QT 4.3.2 (Windows).

Ich habe eine eigene Klasse von QGraphicsScene abgeleitet in der ich gerne ein QGraphicsSvgItem anzeigen lassen möchte:

tga_draw_widget.h:

Code: Alles auswählen

#ifndef TGA_DRAW_WIDGET_H_
#define TGA_DRAW_WIDGET_H_


#include <QtSvg/QtSvg>
#include <QtGui/QGraphicsScene>
#include <QtGui/QGraphicsRectItem>
#include <QtSvg/QSvgRenderer>


class tga_draw_widget : public QGraphicsScene
{
	Q_OBJECT
public:
	tga_draw_widget(QGraphicsView* parent = 0, Qt::WFlags flags = 0);
	virtual ~tga_draw_widget();
private:
	QGraphicsSvgItem *test;
	QGraphicsRectItem *test2;
	QSvgRenderer *renderer;

};
#endif
tga_draw_widget.cpp:

Code: Alles auswählen

#include "tga_draw_widget.h"
#include <QtSvg/QtSvg>
#include <QtSvg/QSvgRenderer>
#include <QtCore/QString>
#include <QtGui/QGraphicsScene>
#include <QtGui/QGraphicsRectItem>

tga_draw_widget::tga_draw_widget(QGraphicsView* parent /*= 0*/, Qt::WFlags flags /*= 0*/) //: QWidget(parent, flags)
{
	renderer = new QSvgRenderer();
	renderer->load(QLatin1String("icons/tga/luftkuehler.svg"));
	

	test = new QGraphicsSvgItem();
	//test->show();
	test->setSharedRenderer(renderer);
	test->setElementId(QLatin1String("layer1"));

	test2 = new QGraphicsRectItem(0, 0, 20, 20);
	this->setSceneRect(QRectF(0,0,500,500));
	this->addItem(test2);
	this->addItem(test);
	parent->setScene(this);
	

}


tga_draw_widget::~tga_draw_widget()
{

}
In einer anderen Klasse wird diese Scene dann einem QGraphicsView zugewiesen. Diese Zuweisung findet in einem Slot statt und geschieht damit erst bei einem Klick auf den entsprechenden Button.

Code: Alles auswählen

void MOBILA::show_tga()
{
	
	tga_widget = new tga_draw_widget(ui.graphicsView_tga);
	ui.graphicsView_tga->show();


}
Wenn ich nun im Programm allerdings auf diesen Button klicke
stürzt das Programm ab und ich erhalte die Fehlermeldung:
QPixmap: Must construct a QApplication before a QPaintDevice

Was mache ich falsch? Die QApplication - Objekt müßte doch längst da sein da die Anwendung ja läuft bevor ich diesen Button klicke.
Es muss irgendwie an dem QGraphicsSvgItem Objekt liegen, denn wenn
ich in der Datei tga_draw_widget.cpp die Zeile

Code: Alles auswählen

this->addItem(test);
auskommentiere ,und das SvgItem damit nicht angezeigt wird, funktioniert alles bestens. - sprich das QGraphicsRectItem wird angezeigt

Kann mir jemand einen Hinweiß geben?
Gruß,
SuperSonik
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ein Backtrace wäre nicht schlecht.
Ggf. liegt das Problem bei setSharedRenderer() - hat es so , wie du es benutzt, überhaupt einen Sinn - ich glaube nicht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

Beitrag von SuperSonik »

Christian81 hat geschrieben:Ein Backtrace wäre nicht schlecht.
Ggf. liegt das Problem bei setSharedRenderer() - hat es so , wie du es benutzt, überhaupt einen Sinn - ich glaube nicht.
Nein der Renderer hat eigentlich keinen Sinn. Ich habe ihn nur mal eingebaut
um zu testen ob dies das Problem vielleicht löst, da in der Doku nur ein Beispiel mit Renderer ist.

Kannst Du mir sagen was ein Backtrace ist. - Habe ich noch nie gehört.
Gruß,
Sonik
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Aber einen Debugger haben wir schonmal benutzt??

http://www.google.de/search?hl=de&q=bac ... uche&meta=
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

Beitrag von SuperSonik »

Christian81 hat geschrieben:Aber einen Debugger haben wir schonmal benutzt??

http://www.google.de/search?hl=de&q=bac ... uche&meta=
Ich habe früher bei C immer den ddd also die graphische Oberfläche zum gdb benutzt. Jetzt bei C++ und im Visual Studio 2005 habe ich den Debugger
noch nie benutzt. Ich habe mir bisher immer die Variablen ausgegeben, oder
bin aus den Fehlermeldungen auf der Kommandozeile schlau geworden. :oops:

Ich habe im Moment keine wirkliche Ahnung wie ich das jetzt debuggen soll. :(
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

mit F9 einen Breakpoint setzen und starten - was ist so schwierig daran?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

Beitrag von SuperSonik »

Christian81 hat geschrieben:mit F9 einen Breakpoint setzen und starten - was ist so schwierig daran?
Eigentlich nichts -> Habe ich auch schon mal ausprobiert.
Ich habe mich mit den Breakpoints bis an die Zeile

Code: Alles auswählen

 tga_widget = new tga_draw_widget(ui.graphicsView_tga); 
vorgearbeitet. In der Zeile raucht das Programm dann ab.
Damit bin ich aber nicht schlauer wie vorher.
Vor dieser Zeile sehen sämtliche Variablen eigentlich gut aus.
Meine Variablen sind alle richtig belegt. Hinzu kommen noch eine Menge Variablen von denen ich keine Ahnung habe, teilweise vom moc, jede Menge Flags etc.
flare
Beiträge: 11
Registriert: 27. Januar 2007 11:43

Beitrag von flare »

Hi SuperSonik,

Na mit Visual Studio hast Du ja nen sehr guten Debugger. Und ohne kann man (zumindest ab einer berstimmten Projektgroeße) sowieso nicht richtig arbeiten.

Guck mal unter http://www.microsoft.com/germany/msdn/w ... =118769076 nach, da gibts nen ganz netten Webcast zu dem Thema, falls Du Dich noch nicht im VS-Debugger auskennst.
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

Beitrag von SuperSonik »

Das hört sich gut an. Ich werde mich da mal durcharbeiten.
Vielen Dank.
flare
Beiträge: 11
Registriert: 27. Januar 2007 11:43

Beitrag von flare »

Bitte Bitte, gern geschehen.

Ich seh gerade bloß, dass der Webcast sich um Visual C# dreht, nicht um C++. Naja, man sollte sich halt selbst informieren, bevor man was postet... 8) Vielleicht kannst Du ja trotzdem ein bißchen was damit anfangen. Zumindest das "look-and-feel" kommt mit so einem webcast ja ganz gut rüber.

Ansonsten gibts auch ne Doku auf http://msdn2.microsoft.com/de-de/library/sc65sadd.aspx.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Debug-Fenster -> Backtrace
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten