我需要设计和开发一种图形软件,可以编辑包含图形元素的自定义文件等。
我希望这个软件包含许多文档,这要归功于QMdiArea
,QMainWindow
实际上是我QGraphicsView
内部的中心窗口小部件。
对于每个文档,我同时需要QGraphicsScene
和QGraphicsView
,因为它们可以协同工作。
现在,我的问题是,我应该将QGraphicsScene
与受保护/私有成员一起继承到自己的QWidget
,还是应该创建一个继承QGraphicsView
并处理{的实例的类? {1}} / QGraphicsScene
?
还是有任何我没想到的解决方案吗?
答案 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()
,它返回所有子窗口的列表。