لماذا لا يظهر QGraphicsView الخاص بي في Mainwindow في QT4؟

StackOverflow https://stackoverflow.com/questions/1993682

  •  22-09-2019
  •  | 
  •  

سؤال

ربما يكون هذا شيئًا واضحًا للغاية ، لكن لديّ جديد في QT ولا يمكنني اكتشافه. لدي مواد رئيسية بسيطة تحتوي على زر واحد. عند النقر فوق هذا الزر ، أريد إنشاء QGraphicsScene ، وأضف بضعة أسطر ثم أظهر ذلك في النافذة. ومع ذلك ، عندما أقوم بتشغيل هذا الرمز في نافذة ، لا يظهر.

ولكن ، إذا قمت بتشغيل هذا على أنه Qaplication ، فإنه يظهر على ما يرام. ماذا ينقصني؟

هنا هو الرمز في 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();

}

هل كانت مفيدة؟

المحلول

يحتاج QGraphicsView الخاص بك إلى CentralWidget من mainwindow (أو أي عنصر واجهة مستخدم تريد وضعه على رأسه) ليتم تعيينه كوالد. كما تحتاج إلى "جديد" من وجهة نظرك ومشهدك لوضعها على الكومة حتى لا يتم تدميرها بمجرد الانتهاء من السحب. انظر إلى اتباع التغييرات على الكود الخاص بك سوف تعمل بشكل جيد بالنسبة لك:

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

أتمنى أن يساعد هذا ، تحياتي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top