在QMdiArea中处理多个文档的最佳实践?

时间:2012-10-28 07:57:54

标签: qt qgraphicsview qgraphicsscene qmainwindow qmdiarea

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

我希望这个软件包含许多文档,这要归功于QMdiAreaQMainWindow实际上是我QGraphicsView内部的中心窗口小部件。

对于每个文档,我同时需要QGraphicsSceneQGraphicsView,因为它们可以协同工作。

现在,我的问题是,我应该将QGraphicsScene与受保护/私有成员一起继承到自己的QWidget,还是应该创建一个继承QGraphicsView并处理{的实例的类? {1}} / QGraphicsScene

还是有任何我没想到的解决方案吗?

1 个答案:

答案 0 :(得分: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(),它返回所有子窗口的列表。