2010-01-03 119 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需要主窗口的centralwidget(或你想要把它之上的任何部件)被设置为家长。此外,您还需要将新的视图和场景对象“新”放入堆中,以便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 2010-01-03 17:53:31

+0

嗨,伙计们,完美的工作。我想我明白发生了什么问题 - 因为这不是堆在一起,所以在重新绘制之前就已经清理干净了。 e8johan,如果我没有设置父母,那么它显示为一个新的小部件,我得到两个窗口,而不是一个。我想我可能需要为此设置另一个容器小部件。 – bahree 2010-01-03 21:49:33