Pregunta

Esto es probablemente algo muy obvio, pero tengo un nuevo en QT y no puedo resolverlo. Tengo una simple mainwindow que tiene un botón. Cuando se haga clic en ese botón, quiero crear un QgraphicsScene, agregue algunas líneas y luego muestre eso en la ventana. Sin embargo, cuando ejecuto este código en una ventana, no aparece.

Pero, si ejecuto esto como un Qaplication, aparece bien. ¿Qué me estoy perdiendo?

Aquí está el código en 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();

}

¿Fue útil?

Solución

Su QgraphicsView necesita un entorno central de MainWindow (o cualquier widget que desee ponerlo encima) para ser establecido como padre. También necesita "nuevos" objetos de visión y escena para ponerlos en el montón para que no se destruyan una vez que termine la escena de dibujo. Vea los siguientes cambios en su código funcionaría bien para usted:

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

Espero que esto ayude, Saludos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top