Seite 1 von 1
Problem mit QGraphicsView
Verfasst: 21. November 2006 16:02
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);
Verfasst: 21. November 2006 17:33
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"));
Verfasst: 21. November 2006 18:26
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
Verfasst: 21. November 2006 19:07
von Christian81
Schonmal geschaut ob this->graphicsView != NULL ist ?
Verfasst: 21. November 2006 19:19
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.
Verfasst: 21. November 2006 19:42
von upsala
Ich frag mich immer, warum ihr immer this-> schreibt ich aber noch nie this->this-> gesehen habe...
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...
Verfasst: 21. November 2006 20:01
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.
Verfasst: 21. November 2006 20:04
von Christian81
ok, dann eben nochmal...
Schonmal geschaut ob this->graphicsView != NULL ist?
Verfasst: 21. November 2006 20:18
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?
Verfasst: 21. November 2006 20:27
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();
Verfasst: 21. November 2006 20:39
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.
Verfasst: 21. November 2006 21:18
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.
Verfasst: 21. November 2006 21:43
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...