我需要设计和开发一种图形片段,可以编辑包含图形元素的自定义文件等。
我希望该软件包含许多文档,这要归功于QMdiArea
,这实际上是我QMainWindow
内部的中央小部件。
对于每个文档,我也需要QGraphicsView
和QGraphicsScene
,因为它们一起工作。
现在,我的问题是,我应该将QGraphicsView
带到其自己的QGraphicsScene
上,还是应该创建一个继承QWidget
并处理QGraphicsView
/QGraphicsScene
实例的类?
还是我没有考虑过的任何解决方案?
首先,我认为您不需要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()
返回所有子窗口的列表。