1

これはおそらく非常に明白なことですが、私は Qt が初めてで、理解できません。ボタンが 1 つある単純な MainWindow があります。そのボタンがクリックされたら、QGraphicsScene を作成し、いくつかの行を追加して、それをウィンドウに表示します。ただし、このコードをウィンドウで実行すると表示されません。

しかし、これを 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();

}

4

1 に答える 1

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

これが役に立てば幸いです、よろしく

于 2010-01-03T05:50:30.100 に答える