0

検索を行うと、これが私が見つけて「main.cpp」に配置したものです。

QGraphicsScene scene;
QGraphicsView view(&scene);

しかし、次のようなものが必要で、「mainwindow.cpp」内に配置されます。

QGraphicsScene scene;
QGraphicsView *view = new QGraphicsView();
view->addScene(&scene); //need something like this

これはメインで機能し、「黄色」の背景を表示します。しかし、mainwindow.cpp の setScene で変更を加えると、黄色の背景が表示されなくなります。

main.cpp

 QGraphicsScene scene;
 QGraphicsView view(&scene);

 view.setRenderHint(QPainter::Antialiasing);
 view.setBackgroundBrush(Qt::yellow);
 view.setCacheMode(QGraphicsView::CacheBackground);
 view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
 view.setDragMode(QGraphicsView::ScrollHandDrag);
 view.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Colliding Mice"));
 view.resize(1000, 800);
 view.show();

mainwindow.cpp : 黄色の背景なし

 QGraphicsScene scene;
 QGraphicsView *view = new QGraphicsView();
 view->setScene(&scene);

 view->setRenderHint(QPainter::Antialiasing);
 view->setBackgroundBrush(Qt::yellow);
 view->setCacheMode(QGraphicsView::CacheBackground);
 view->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
 view->setDragMode(QGraphicsView::ScrollHandDrag);
 view->setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Colliding Mice"));
 view->resize(1000, 800);
 view->show();
4

3 に答える 3

2

addScene」ではなく「setScene」が必要です。一度にビューに設定できるシーンは 1 つだけであるため、「set」が関数名に適した言葉であり、以前に存在していたシーンをすべて置き換えることを意味します。'add' は、新しいシーンが追加されても古いシーンが存在することを意味しますが、QGraphicsView.

QGraphicsScene scene;
QGraphicsView *view = new QGraphicsView();
view->setScene(&scene); //<--- The function name you want.

もちろん、QGraphicsView を実際にメイン ウィンドウに設定する必要があります。メインウィンドウ全体を埋めたい場合は、次を使用します。

this->setCentralWidget(view); //Assuming 'this' is the QMainWindow widget.

@ Merlin069がアドバイスするように。

ウィンドウ全体を埋めるのではなく、他のものも必要な場合は、メイン ウィンドウ ウィジェットにレイアウトを追加し、そのレイアウトにビューを追加する必要があります。

//Create the layout.
QHBoxLayout *horizontalLayout = new QHBoxLayout;

//Add widgets to the layout.
horizontalLayout->addWidget(sidepanelOnTheLeft);
horizontalLayout->addWidget(view);
horizontalLayout->addWidget(sidepanelOnTheRight);

//Set the layout to the widget that owns it.
this->centralWidget()->setLayout(horizontalLayout);

Qt のドキュメントは非常に優れています。あなたは間違いなくブックマークする必要があります:

Qt ドキュメント: クラス インデックス

于 2013-07-23T15:05:50.510 に答える
1

@JaminGrey からの回答に加えて、QMainWindow 関数 setCentralWidget を呼び出して、QGraphicsView オブジェクトを渡して QMainWindow に追加することができます。

QMainWindow を使用していない場合は、QGraphicsView 関数 show() を呼び出します。何かを表示するには、オブジェクトを QGraphicsScene に追加する必要があることに注意してください。

ビューがシーンへのポインタを取るため、QGraphicsView に追加される前に、QGraphicsScene が動的に割り当てられていることを確認してください。

于 2013-07-23T15:09:03.417 に答える