2010-01-03 2 views
1

이것은 아마도 매우 명백한 것이지만 Qt를 처음 접했을뿐입니다. 하나의 버튼이있는 간단한 MainWindow가 있습니다. 해당 버튼을 클릭하면 QGraphicsScene을 만들고 몇 줄을 추가 한 다음 창에 표시하려고합니다. 그러나 창에서이 코드를 실행하면 표시되지 않습니다.내 QGraphicsView가 Qt4의 내 MainWindow에 나타나지 않는 이유는 무엇입니까?

그러나 이것을 QApplication으로 실행하면 정상적으로 나타납니다. 내가 뭘 놓치고 있니? (또는 상단에 넣어 원하는 위젯)을로 설정하는

void TheDrawings::drawScene() { 
qDebug() << "Setting up Scene"; 

QGraphicsScene scene(QRect(-50, -50, 400, 200)); 

QPen pen(Qt::red, 3, Qt::DashDotDotLine); 

QGraphicsRectItem *rectItem = new QGraphicsRectItem(QRect(-50, -50, 400, 
    200), 0, &scene); 
rectItem->setPen(pen); 
rectItem->setBrush(Qt::gray); 

QGraphicsSimpleTextItem *textItem = new QGraphicsSimpleTextItem(
    "Amit Bahree", 0, &scene); 
textItem->setPos(50, 0); 

QGraphicsEllipseItem *eclipseItem = new QGraphicsEllipseItem(QRect(170, 20, 
    100, 75), 0, &scene); 
eclipseItem->setPen(QPen(Qt::darkBlue)); 
eclipseItem->setBrush(Qt::darkBlue); 

QGraphicsPolygonItem *polygonItem = new QGraphicsPolygonItem(QPolygonF(
    QVector<QPointF>() << QPointF(10, 10) << QPointF(0, 90) 
    << QPointF(40, 70) << QPointF(80, 110) << QPointF(70, 20)), 
    0, &scene); 
polygonItem->setPen(QPen(Qt::darkGreen)); 
polygonItem->setBrush(Qt::yellow); 

qDebug() << "Setting up the view"; 
QGraphicsView view; 
view.setScene(&scene); 
view.show(); 

}

답변

4

이를 QGraphicsView가 MainWindow를의 centralwidget 필요 : 여기

은 MainWindow를의 코드입니다 부모의. 또한 씬 (view)과 씬 (scene) 객체를 "새롭게"하여 힙에 놓아야 만 drawScene이 끝나면 파괴되지 않습니다. (이 도움이

QGraphicsScene* scene = new QGraphicsScene(QRect(-50, -50, 400, 200)); 
... 
QGraphicsView* view = new QGraphicsView(ui->centralWidget); 
view->setScene(scene); 
view->setGeometry(QRect(50, 50, 400, 200)); 
view->show(); 

희망, 당신은 실제로 뷰의 부모를 필요

+1

확실하지 간주하지만, 당신은 확실히 힙에 할당해야합니다 당신을 위해 잘 작동 할 코드에 대한 변경 사항을 다음의 참조 새로운). – e8johan

+0

안녕 얘들 아, 완벽하게 작동했습니다. 나는 잘못되었다는 것을 이해하고 있다고 생각합니다. 이것은 힙에 없기 때문에, 다시 칠하기 전에 정리를하고있었습니다. e8johan 부모를 설정하지 않으면 새 위젯으로 표시되고 하나 대신 두 개의 창이 나타납니다. 이 경우 다른 컨테이너 위젯을 설정해야 할 수도 있습니다. – bahree