10

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

但是,我想添加一些控件层(例如滚动条、缩放+其他按钮 - 我想使其具有与例如 Google Maps 类似的样式,即数据将显示在整个小部件中,并且按钮将显示在它们的顶部)到小部件。所以我认为将它们添加到场景中可能是可行的(也许作为QGraphicsGroupItem将显示在数据上的 a 的孩子)。但是我希望它们在调整整个小部件的大小时移动和调整大小,所以我应该使用 aQGraphicsLayout来管理它们。但此时,我发现事情相当复杂。

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

  1. QGraphicsWidget布局只能管理a
  2. QGraphicsLayout只能用于管理 a 的子级QGraphicsWidget

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

所以我想问:

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

  2. 在这种情况下使用有什么好处QGraphicsScene(性能或简单性......)?

  3. 我应该如何QGraphicsScene利用它的优势?

4

2 回答 2

7

从 Qt 4.4 开始,您可以使用以下方法将经典小部件嵌入到 aQGraphicsSceneQGraphicsProxyWidget

QWidget *widget = new QWidget;
QGraphicsScene scene;
QGraphicsProxyWidget *proxy = scene.addWidget(widget);
于 2009-07-29T02:14:05.363 回答
1

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

或者,有几次我们的布局过于复杂,布局小部件无法轻松处理。我们没有创建自定义布局,而是将它们定位为没有布局,并在 resize 事件的代码中移动它们。它也同样有效。

于 2009-06-24T18:32:54.930 回答