0

グラフィック要素などを含むカスタマイズされたファイルを編集できる、一種のグラフィック ソフトウェアを設計および開発する必要があります。

QMdiAreaの中に実際に私の中心的なウィジェットであるのおかげで、ソフトウェアには多くのドキュメントが含まれていると思いQMainWindowます。

ドキュメントごとに、aQGraphicsViewと a の両方が必要になりQGraphicsSceneます。これらは一緒に機能するからです。

ここで、私の質問は、QGraphicsView保護された/プライベート メンバーを独自のに継承する必要があるか、または/のインスタンスQGraphicsSceneを継承して処理するクラスを作成する必要があるかということです。QWidgetQGraphicsViewQGraphicsScene

それとも、私が考えていなかった解決策が残っていますか?

4

1 に答える 1

1

まず、QGraphicsScene と QGraphicsView を管理するために QWidget は必要ないと思います。それを念頭に置いて、「ベストプラクティス」は通常、可能であればサブクラス化を避けることです。最終的に QGraphicsView をサブクラス化する必要があるかもしれません (デフォルトの機能を変更したい場合) が、あなたの質問には、今すぐに必要であることを意味するものは何もありません。また、ビューの現在のシーンを返す関数があるQGraphicsView::scene()ため、シーンをメンバーにする必要がないことに注意してください (既にメンバーになっています)。

特定のビューまたはシーンにアクセスする必要がある場合は、次のようにすることができます。

MainWindow::onActionClearActiveWindow() // just an example
{
    QMdiArea *myMdiArea = static_cast<QMdiArea*>(centralWidget());
    QGraphicsView *activeView = static_cast<QGraphicsView*>(myMdiArea->widget());
    QGraphicsScene *activeScene = activeView->scene();
    activeScene->clear();
}

QMdiArea::subWindowList()すべてのサブウィンドウのリストを返すも参照してください。

于 2012-10-28T11:08:29.733 に答える