2016-04-12 6 views
0

Grundsätzlich brauche ich etwas, um es zu zeichnen, das ist einfach mit Designer zu verwenden (zum Beispiel erben von QWidget und override von paintEvent erfordern einige Anstrengungen, es in Qt-Designer zu verwenden).Qt: setScreenRect = segfault

So füge ich QGraphicsView Datei .ui und solchen Code in Button-Methode schreiben:

QGraphicsScene *scene = ui->graphicsView->scene();  
const QRectF scene_r = ui->graphicsView->sceneRect(); 
//here I see that scene_r == {0, 0, 0, 0}; 

dann füge ich einen solchen Code:

const QSize draw_size = ui->graphicsView->size(); 
//draw_size == {100, 100} 
scene->setSceneRect(QRectF(0, 0, draw_size.width(), draw_size.height())); 

und bekam segfault auf Linie scene->setSceneRect, was los ist Hier?

Eigentlich möchte ich Recht einen solchen Code:

//scene size == draw_size 
QPixmap pix(draw_size.width(), draw_size.height()); 
//fill pix with external program 
scene->addPixmap(map_pix); 

ist es möglich?

Ich arbeite noch nie mit QGraphicsView.

+1

Und 'scene' ist kein Null-Zeiger? –

+0

Ja, 'Szene' ist' nullptr', danke, ich denke nie, dass ich auf diese Art graben kann, wegen dem Sinn, 'QGraphicsView' ohne Szene zu erstellen. – user1244932

+1

Es ist immer eine gute Idee, ein Objekt zu haben, bevor Sie es benutzen;) – dtech

Antwort

1

Der Grund dafür, dass Sie einen Segfault erhalten, ist, dass Sie keine Szene für die Ansicht festgelegt haben, daher gibt die Szene() einen Nullzeiger zurück.

QGraphicsScene scene; 
QGraphicsView view(&scene); 
view.show(); 

Alternative ist der Ansicht, ohne eine Szene dann fügen Sie es später zu erstellen:

void setScene(QGraphicsScene *scene) 

Referenz: http://doc.qt.io/qt-5/qgraphicsview.html