QG地面站
飞行视图自定义Fly View的设计方式使其可以从简单到复杂的多种方式进行可视化。它被设计成三个独立的层,每个层都是可定制的,提供不同的变化水平。
图层从视觉上看,从顶部到底部的飞行视图有三层:
FlyView.qml这是ui和业务逻辑的基础层,用于控制地图和视频切换。
FlyViewWidgetsOverlay.qml该层包括飞行视图的所有剩余小部件。
FlyViewCustomLayer.qml这是您使用资源覆盖来添加您自己的自定义层来覆盖的层。
插入协商使用QGCToolInsets飞行视图的一个重要方面是,它需要了解它在地图窗口中间有多少中心空间,这些空间不会被位于边缘的ui小部件遮挡窗户。当车辆离开视野时,它使用此信息来平移地图。这不仅需要对窗口边缘进行,还需要对小部件本身进行,以便地图在进入小部件之前平移。
这是通过使用QGCToolInsets每个图层中包含的对象。该对象为每个窗口边缘提供插入信息,通知系统基于边缘的ui占用了多少不动产。每一层都通过下面的层的插入parentToolInsets然后报告新的插入,考虑到下面的层和它自己的添加通过toolInsets。最终的结果总插入然后给地图,所以它可以做正确的事情。理解这一点的最好方法是查看上游和自定义示例代码。
FlyView.qml从ui交互和业务逻辑来看,视图的基础层也是最复杂的。它包括地图和视频的主要显示元素以及引导控件。虽然您可以资源覆盖此层,但不建议这样做。如果你这样做,你最好真的 (真的) 知道你在做什么。它是一个单独的层的原因是使上面的层更简单,更容易定制。
FlyViewWidgetsOverlay.qml此图层包含飞行视图的所有其余控件。您可以通过使用隐藏控件的能力QGCFlyViewOptions。但是为了更改上游控件的布局,您必须使用资源覆盖。如果你看一下源代码,你会看到控件本身被很好地封装,这样就不应该很难创建你自己的重写,重新定位它们和/或添加你自己的ui。同时保持与控件的上游实现的连接。
FlyViewCustomLayer.qml这为飞行视图提供了最简单的自定义功能。允许您添加添加到现有上游控件的ui元素。上游代码不添加ui元素,并且是您自己的自定义代码的基础,用作此qml的资源覆盖。自定义示例代码为您提供了如何执行此操作的示例。
建议简单定制最好的开始是使用自定义层覆盖加上关闭ui元素从窗口小部件层 (如果需要)。我建议尽量坚持只有这一点,如果可能的话。它提供了最大的能力,不会被下面各层的上游变化所困扰。
中等复杂性定制如果你真的需要重新定位上游ui元素,那么你唯一的选择就是压倒一切FlyViewWidgetsOverlay.qml。通过这样做,您可以使自己与上游变化保持一定距离。尽管您仍然可以免费获得上游控件的更改。如果有一个全新的控制添加到飞行视图上游你不会得到它,直到你把它添加到你自己的覆盖。
高度复杂的定制最后也是最不推荐的自定义机制是最重要的FlyView.qml。通过这样做,您将进一步远离免费获得上游更改。