Problem mit QGraphicsView

Verschiedenes zu Qt
Antworten
Ralph
Beiträge: 9
Registriert: 21. April 2006 15:13

Problem mit QGraphicsView

Beitrag von Ralph »

Also ich seh einfach den Fehler nicht. Ich hab ein einfaches QWidget mit nem QGraphicsView drin. Nun will ich ne Scene basteln, die erstmal ein Hintergrundbild hat und dann davor manipulierbare Objekte. Nur schmiert er mir hier bei setScene() schon ab.

Code: Alles auswählen

QImage* image = new QImage("picture.bmp");
QGraphicsScene scene;
scene.addPixmap(QPixmap::fromImage(*image));
this->graphicsView->setScene(&scene);
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Zu wenig Code...

Außerdem geht folgendes kürzer:
QImage* image = new QImage("picture.bmp");
QGraphicsScene scene;
scene.addPixmap(QPixmap::fromImage(*image));

und zwar so:

Code: Alles auswählen

QGraphicsScene scene; 
scene.addPixmap(QPixmap("picture.bmp"));
Ralph
Beiträge: 9
Registriert: 21. April 2006 15:13

Beitrag von Ralph »

Da ist nicht viel mehr Code.
Ich hab ein mit Designer erstelltes QWidget wo das QGraphicsView drinliegt. Rufe den Konstruktor auf

Code: Alles auswählen

someWidget::someWidget(QWidget* parent , Qt::WindowFlags flags)
: QWidget(parent, flags)
{
	setupUi(this);
	QGraphicsScene scene;
	scene.addPixmap(QPixmap("picture.bmp"));
	this->graphicsView->setScene(&scene);
}
und er steigt bei this->graphicsView->setScene(&scene); aus
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Schonmal geschaut ob this->graphicsView != NULL ist ?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ralph
Beiträge: 9
Registriert: 21. April 2006 15:13

Beitrag von Ralph »

Code: Alles auswählen

if (this->graphicsView != NULL) this->graphicsView->setScene(&scene);
Selbiger Fehler. Ich zitiere da mal die Class Reference.
To visualize a scene, you start by constructing a QGraphicsView object, passing the address of the scene you want to visualize to QGraphicsView's constructor. Alternatively, you can call setScene() to set the scene at a later point.
Ich seh hier echt nicht was ich falsch mache.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich frag mich immer, warum ihr immer this-> schreibt ich aber noch nie this->this-> gesehen habe... :wink:

Ok, eigentliche Frage: Woher weist du das Programm genau bei this->graphicsView->setScene(&scene) abstürzt und nicht danach? Ich würd mal darüber nachdenken...
Ralph
Beiträge: 9
Registriert: 21. April 2006 15:13

Beitrag von Ralph »

upsala hat geschrieben:Ok, eigentliche Frage: Woher weist du das Programm genau bei this->graphicsView->setScene(&scene) abstürzt und nicht danach? Ich würd mal darüber nachdenken...

Die Tatsache, daß es nicht abstürzt wenn die Zeile auskommentiert ist, scheint mir ein ziemlich gutes Indiz zu sein.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

ok, dann eben nochmal...
Schonmal geschaut ob this->graphicsView != NULL ist?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ralph
Beiträge: 9
Registriert: 21. April 2006 15:13

Beitrag von Ralph »

Christian81 hat geschrieben:ok, dann eben nochmal...
Schonmal geschaut ob this->graphicsView != NULL ist?
Du fragst so bedeutungsvoll.

Code: Alles auswählen

if (this->graphicsView != NULL) this->graphicsView->setScene(&scene);
Ausreichend?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ja.

Und auch schonmal aus der Doku das Codeschnipsel probiert:

Code: Alles auswählen

 QGraphicsScene scene;
 scene.addText("Hello, world!");

 QGraphicsView view(&scene);
 view.show();
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ralph
Beiträge: 9
Registriert: 21. April 2006 15:13

Beitrag von Ralph »

Ja das geht, auch mit der Scene die ich hier erzeuge und das Pixmap reinlade.

Code: Alles auswählen

	QGraphicsView view = new QGraphicsView();
	view.setScene(&scene);
geht auch. Da stellt sich mir doch die Frage: Warum mag der den mit dem Designer erstellten GraphicsView nicht.
Ralph
Beiträge: 9
Registriert: 21. April 2006 15:13

Beitrag von Ralph »

Ok Upsala, es scheint so als crasht er doch danach. Ich hab mal das GraphicsView extra erzeugt

Code: Alles auswählen

{
	setupUi(this);
	graphicsView = new QGraphicsView();
    graphicsView->setObjectName(QString::fromUtf8("graphicsView"));
    graphicsView->setGeometry(QRect(10, 10, 481, 151));

	QGraphicsScene scene;
	scene.addPixmap(QPixmap("picture.bmp"));
	graphicsView->setScene(&scene);
	graphicsView->show();
}
Nun erscheint es für den Bruchteil einer Sekunde und crasht dann. Nur warum ist mir immer noch schleierhaft.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wie lange denkst du, daß deine QGraphicsScene lebt? Nämlich genau bis zum Ende deiner Funktion und dort wird die scene zerstört und somit kommt's zum crash...
Antworten