我正在Qt4中创建一些显示小部件的图形数据,我很想使用QGraphicsScene
,为数据项创建QGraphicsItem
等。
但是,我想添加一些控件层(例如滚动条,缩放+其他按钮 - 我想以类似于Google地图的方式制作它,也就是说,数据会在整个小部件上显示,按钮将在它们的顶部显示到小部件。所以我认为将它们添加到场景中可能是可行的(可能是作为QGraphicsGroupItem
的子项将在数据上显示)。但我希望他们能够搬家调整整个窗口小部件时调整大小,所以我应该使用QGraphicsLayout
来管理它们。但在这一点上,我发现事情非常复杂。
问题在于,当使用QGraphicsLayout
时,以下约束成立:
QGraphicsWidget
QGraphicsLayout
只能用于管理QGraphicsWidget
这意味着我必须将控件创建为QGraphicsWidget
,向数据窗口小部件添加顶级QGraphicsWidget
,并自行管理此顶级窗口小部件的大小。
所以我想问:
经典方法(即,对所有控件使用普通旧窗口小部件,仅使用QGraphicsScene
显示数据)是不是更合理?
在这种情况下使用QGraphicsScene
是否有任何优势(性能还是简单......)?
我应该如何利用QGraphicsScene
来发挥其优势?
答案 0 :(得分:6)
从Qt 4.4开始,您可以使用QGraphicsProxyWidget
在QGraphicsScene
中嵌入经典小部件:
QWidget *widget = new QWidget;
QGraphicsScene scene;
QGraphicsProxyWidget *proxy = scene.addWidget(widget);
答案 1 :(得分:1)
如果您认为QGraphicsScene
(或您拥有的任何其他小部件)适合您的大多数显示器,请使用它。我们过去为类似的事情所做的是创建一个自定义窗口小部件(从QWidget
继承(以这种或那种方式),并将控件窗口小部件放在该窗口小部件的顶部。这意味着整个小部件正在绘制您想要绘制的任何内容,并且控件小部件位于其上方,随着整个小部件的大小调整大小。
或者,有几次我们的布局有点过于复杂,布局小部件无法轻松处理。我们只是在没有布局的情况下定位它们,而是在resize事件的代码中移动它们,而不是创建自定义布局。它的效果也一样。