为包含多个 QQuickPaintedItems 的 QQuickView 实现滚动

Implement Scrolling for QQuickView containing multiple QQuickPaintedItems

所以最近我开始了一个项目,我想在其中显示一个图表,显示不同数据集之间的关系。

该图由边和节点组成,而这两个 class 都继承了 QQuickPaintedItem 并覆盖了 paint(QPainter* painter) 方法。我有另一个 class 将所有节点和边存储在两个 QList 中。当我想显示图形时,调用每个节点和边的绘制方法并将其绘制到 QQuickView 中。我通过为 QQuickView 设置一个 Qml 文件来做到这一点(重要:加载的 qml 文件与实际的图形无关,所有内容都是用 QQuickPaintedItem 的绘画方法绘制的,我没有向 Qml 公开任何与图形相关的内容. Qml 文件用于显示图形的一些控件)并获取 QQuickView 的内容项(QQuickItem* 来自方法 contentItem())并将其设置为每个节点和边缘的父项。所有这些对我来说都很好。

现在我的问题是:我想显示的一些图表比我想在其中显示它们的实际视图大,所以为了解决这个问题,我想为我的视图实现水平和垂直滚动。但是,由于我无法使用像 ListView aso 这样的预定义 Qml-Layouts,因此我还没有找到任何似乎可以解决我的问题的方法。对于我的图表。

有人知道我如何实现滚动吗?有没有办法为我的 QQuickView 实现这个,或者有没有办法将我的两个节点和边列表公开给 Qml 并在其中实现滚动?

(如果您需要一些代码,请随时询问。我认为现在分享一些代码没有意义,因为我首先正在寻找关于该主题的想法) .

谢谢!

如果你不介意渲染一切,你需要的是Flickable

设置 Flickable 的可见宽度和高度(明确地,使用锚点或布局)并将自定义项目嵌套在其中,并设置 flickable 的 contentWidthcontentHeight,具体取决于总尺寸或您的自定义项目。