0

我需要设计和开发一种图形软件,可以编辑包含图形元素的自定义文件等。

我希望该软件包含许多文档,QMdiArea这实际上是我在QMainWindow.

对于每个文档,我都需要 aQGraphicsView和 a QGraphicsScene,因为它们一起工作。

现在,我的问题是,我应该QGraphicsView用受保护/私有成员继承它自己的QGraphicsScene,还是应该创建一个继承QWidget和处理QGraphicsView/实例的类QGraphicsScene

还是有什么我没有想到的解决方案?

4

1 回答 1

1

首先,我认为您不需要 QWidget 来管理 QGraphicsScene 和 QGraphicsView。考虑到这一点,“最佳实践”通常是尽可能避免子类化。最终,您可能必须继承 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 回答