为什么我的QGraphicsView没有出现在Qt4的MainWindow中?

时间:2010-01-03 02:04:54

标签: c++ qt4 qgraphicsview

这可能是非常明显的事情,但我有一个新的Qt,无法弄清楚。我有一个简单的MainWindow,它有一个按钮。单击该按钮时,我想创建一个QGraphicsScene,添加几行,然后在Window中显示。但是,当我在Window中运行此代码时,它不会显示。

但是,如果我将它作为QApplication运行,它会显示正常。我错过了什么?

以下是MainWindow中的代码:

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();

}

1 个答案:

答案 0 :(得分:4)

你的QGraphicsView需要一个主窗口的中央控件(或者你想把它置于其上的任何小部件)来设置为父窗口。此外,您需要“新”视图和场景对象以将它们放在堆上,这样一旦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();

希望这有帮助,尊重