在QT客户端共享位置
如何使用它?
轻微使用
在对话中,用户可以点击位置图标来显示地图.如果设备上启用了 Location Services
,则将显示用户的位置在地图上,以及所有其他分享位置的成员的位置 (从选择帐户的所有对话中).用户可以通过点击位置共享按切换位置共享.默认情况下,用户的位置共享为15分钟,但该设置可以在应用程序设置中修改.
当用户在对话中分享自己的位置时,会在对话标志上出现红色位置图标.如果用户从另一个成员那里获得位置,会在所有成员参与的对话中显示一个色位置图标.
通过近期调整,放大进出,移动和关闭地图,用户可以与地图互动.地图也可以被结或不结.如果地图被结,如果用户在正确的帐户中,则可以重新结.
高级使用
多分类
情况
用户已经与对话A和对话B共享位置.
功能
如果用户转换到对话C,地图仍然可见,用户有两个选择
单击位置共享按,也可以与对话C成员共享位置.
按点击位置共享终端按. 这会显示一个弹出,允许用户完全关闭位置共享,或者只停止与对话C成员共享位置.
嵌窗户
如果窗口被打开,用户将无法点击位置共享按,因为窗口不再连接到对话.为了开始与新人共享位置,用户必须重新点击窗口.请注意,打开窗口不会影响任何持续的位置共享.此外,在窗口被打开时点击位置共享终端按将停止所有当前位置共享,并不会出现任何弹出,允许用户选择特定的对话,以停止共享.
多个账户
每个帐户都有自己的独特地图.如果用户在帐户A上卸载地图,然后切换到账户B,然后卸载地图,两个地图将会显现.
怎么办?
引言
这种特征分为三个部分:
发送一个位置
接收职位
显示一个位置
为了确定位置,使用[Qt定位]https://doc.qt.io/qt-6/qtpositioning-index.html) API. 一旦确定位置,它将作为DHT上的消息发送给客户端.接收的位置随后通过[OpenLayers]https://openlayers.org/) JavaScript库显示.
发送位置
QGeoPositionInfoSource
类的使用,在地图开放后,将位置转换为JSON格式,并传输到 positionManager
.该类协调整个位置共享过程.该位置随后通过 `sendPosition() 函数共享.
通过”
地方位置Received
信号,让用户可以看到自己的位置在DHT上,在ShareConvIds_`列表中所有对话.该列表包含用户想要分享自己的位置的所有对话的关键.从这个键中,获取所有参与者的URI,并发送一个位置信息给每个参与者.
位置的JSON格式如下:
类型 (位置或停止消息)
宽度
长度
时间 (QtClient未使用)
时间:1671658862000,类型: 位置:
传送位置给恶魔时,作者的URI也会传输.
当用户停止与对话分享自己的位置时,对话的ID就从ShareConvIds_`列表中删除.
接收职位
当收到位置时,它会触发”onPositionReceived() “区块.无论是来自于 QtPositioning
模块的本地位置还是来自其他联系人的位置.在 positionManager
级别上, objectListSharingUris_
列表存储了客户的所有位置.位置是:
添加 (URI不在列表中)
更新 (URI已经存在列表中)
删除 (类型 = “停止”)
位置存储在列表中以类型的物体形式 positionObject
. 这类型允许每个位置都有监视犬.如果该位置在特定的时间内不更新,则将从列表中删除.
显示一个位置
当收到位置时 (slot onPositionReceived()
触发),该位置被传输到Qml,该位置反过来将信息发送到 [OpenLayers]https://openlayers.org/) JavaScript 库.Qt WebEngine
模块允许图书馆的网络技术和Qml之间的桥梁.每个位置由一个层添加到地图中. newPosition()
函数添加一个新的层, updatePosition()
函数更新层的坐标, removePosition()
函数删除层.