闪电查看器
一个结合 Qt Quick、Qt Location、Qt Positioning 和 Qt Websockets,实时显示地图上闪电攻击的应用程序。
运行示例
要从 Qt Creator 中运行示例,打开 欢迎 模式并从 示例 中选择示例。有关更多信息,请访问 构建和运行示例。
概述
闪电查看器 是一个从 WebSocket 接收模拟闪电攻击数据并实时显示在地图上的应用程序。它具有响应式用户界面,适用于横向和纵向方向下移动、平板和桌面大小屏幕。闪电攻击以图标的形式出现在地图上,另一个单独的叠加图层显示上次闪电攻击的距离和时间。这些数据图层可以通过按地图图层按钮访问的切换按钮隐藏和显示。还有一个用于在地图类型之间切换的切换按钮和一个将地图中心定位在用户位置上的按钮。
应用结构
此应用程序遵循模型-视图-控制器 (MVC) 设计模式。用作模型的 LightningItemModel
类存储一系列 LightningItemData
对象,并提供方法来插入新数据和获取有关最新攻击的信息。视图由多个 QML 组件定义,用于显示数据和用户界面并处理用户交互。用于管理 LightningItemModel
和 QML 组件之间数据流的 Controller
类。使用与 Controller
中的槽连接的信号,将 LightningProvider
类打开到在线服务器的 WebSocket 连接。它解析消息并将数据传递给 LightningItemModel
connect(m_provider.get(), &LightningProvider::dataReady, this, &Controller::onDataReceived);
每个闪电攻击都以 LightningItemData
结构表示。它包含攻击的时间戳、纬度和经度,并提供返回从用户提供的 QGeoCoordinate 距离和方向的方法。结构 LastStrikeInfo
保存有关上次闪电攻击的信息。
LightningView.qml
作用为应用程序的主要视图,负责通过组件 MapView.qml
显示地图和闪电数据,并通过组件 ActionsLayer.qml
处理用户控制。
MapView.qml
负责地图缩放和滚动。它使用一个 PositionSource 获取用户的当前位置,并使用一个 Map 来显示地图。此外,它还包括用于显示闪电数据的 LightningMapLayer.qml
和用于显示最后一次闪电攻击信息的 DistanceTimeLayer.qml
。
ActionsLayer.qml
提供了一个地图重新居中的按钮,以及一个自定义切换控制 SwitchMap.qml
,可以在不同地图类型之间切换。它还包括一个地图图层按钮,可以显示地图图层切换。这些切换在 MapLayersItem.qml
中定义。在横向模式中,它们位于地图图层按钮旁边,而在纵向模式中,它们被放置在 Drawer 中,该 Drawer 在 MapLayersDrawer.qml
中定义。
闪电数据源
应用程序从 Qt 维护的服务器接收到模拟的闪电数据。服务器提供了一个 WebSocket API,可以在以下 URL 上建立连接
wss://ewea0y4bn0.execute-api.eu-north-1.amazonaws.com/production/
连接到服务器后,应用程序通过向服务器发送以下 JSON 消息来触发实时数据流
"{\"action\": \"simulatelightningdata\"}"
© 2024 Qt 公司有限公司。本文件包含的文档贡献是其各自所有者的版权。本文件提供的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 及相关标志是芬兰和/或世界上其他国家的 Qt 公司有限公司的商标。所有其他商标均是各自所有者的财产。