2016-04-12 19 views
0

Temel olarak, üzerinde çizim yapmak için bir şeye ihtiyacım var, , tasarımcıyla kullanımı kolay (örneğin QWidget'den devralın ve PaintEvent, Qt tasarımcısında kullanmak için biraz çaba gerektiriyor).Qt: setScreenRect = segfault

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

sonra ben eklemek böyle bir kod:

Yani QGraphicsView dosyasını .ui ve düğme yönteminde böyle kod yazmak eklemek

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

ve ne olup bittiğini hat scene->setSceneRect üzerine segfault var İşte? Mümkün

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

geçerli:

Aslında doğru böyle bir kod istiyor?

Daha önce hiç QGraphicsView ile çalışmadım.

+1

Ve 'scene' bir boş gösterici değil mi? –

+0

Evet, 'sahne' nullptr' olduğunu, teşekkürler, bu şekilde kazmayı düşünmüyorum, çünkü QGraphicsView' sahnesini yaratmak için ne mantıklı. – user1244932

+1

Kullanmadan önce bir nesneye sahip olmak her zaman iyi bir fikirdir;) – dtech

cevap

1

Bir segfault almanızın nedeni, görünüm için herhangi bir sahne ayarlamadığınızdan, dolayısıyla scene() bir boş gösterici döndürecektir.

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

Alternatif bir sahne olmadan görünüm oluşturmak daha sonra onu eklemektir:

void setScene(QGraphicsScene *scene) 

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