我应该如何将QGraphicsScene与布局和小部件一起使用

时间:2009-06-24 14:26:45

标签: c++ user-interface qt qt4 qgraphicsview

我正在Qt4中创建一些显示小部件的图形数据,我很想使用QGraphicsScene,为数据项创建QGraphicsItem等。

但是,我想添加一些控件层(例如滚动条,缩放+其他按钮 - 我想以类似于Google地图的方式制作它,也就是说,数据会在整个小部件上显示,按钮将在它们的顶部显示到小部件。所以我认为将它们添加到场景中可能是可行的(可能是作为QGraphicsGroupItem的子项将在数据上显示)。但我希望他们能够搬家调整整个窗口小部件时调整大小,所以我应该使用QGraphicsLayout来管理它们。但在这一点上,我发现事情非常复杂。

问题在于,当使用QGraphicsLayout时,以下约束成立:

  1. 布局
  2. 只能管理QGraphicsWidget
  3. QGraphicsLayout只能用于管理QGraphicsWidget
  4. 的子项

    这意味着我必须将控件创建为QGraphicsWidget,向数据窗口小部件添加顶级QGraphicsWidget,并自行管理此顶级窗口小部件的大小。

    所以我想问:

    1. 经典方法(即,对所有控件使用普通旧窗口小部件,仅使用QGraphicsScene显示数据)是不是更合理?

    2. 在这种情况下使用QGraphicsScene是否有任何优势(性能还是简单......)?

    3. 我应该如何利用QGraphicsScene来发挥其优势?

2 个答案:

答案 0 :(得分:6)

从Qt 4.4开始,您可以使用QGraphicsProxyWidgetQGraphicsScene中嵌入经典小部件:

QWidget *widget = new QWidget;
QGraphicsScene scene;
QGraphicsProxyWidget *proxy = scene.addWidget(widget);

答案 1 :(得分:1)

如果您认为QGraphicsScene(或您拥有的任何其他小部件)适合您的大多数显示器,请使用它。我们过去为类似的事情所做的是创建一个自定义窗口小部件(从QWidget继承(以这种或那种方式),并将控件窗口小部件放在该窗口小部件的顶部。这意味着整个小部件正在绘制您想要绘制的任何内容,并且控件小部件位于其上方,随着整个小部件的大小调整大小。

或者,有几次我们的布局有点过于复杂,布局小部件无法轻松处理。我们只是在没有布局的情况下定位它们,而是在resize事件的代码中移动它们,而不是创建自定义布局。它的效果也一样。