Obsadba miesta na QT klient
Ako ho používať?
Triviálne použitie
V konverzácii môže používateľ kliknúť na ikonu umiestnenia na zobrazenie mapy. Ak je v zariadení povolené Location Services
, zobrazí sa na mape umiestnenie používateľa spolu s umiestnením všetkých ostatných členov, ktorí zdieľajú svoju polohu (z všetkých konverzácií vybraného účtu). Používateľ môže zapnúť a vypnúť zdieľanie umiestnenia kliknutím na tlačidlá zdieľania umiestnenia.
Keď používateľ zdieľa svoju polohu v konverzácii, zobrazí sa na ikone konverzácie červená ikona polohy. Ak používateľ dostane polohu od iného člena, zobrazí sa na všetkých konverzáciách, v ktorých je prítomný člen, oranžová ikona polohy.
Používateľ môže komunikovať s mapou, keď ju aktualizuje, zoomuje, presúva a zatvorí.
Pokročilé použitie
Vydelenie viacero
scenár
Už používateľ zdieľa polohu so konverzáciou A a konverzáciou B.
Funkcia
Ak používateľ prejde na konverzáciu C, mapa je stále viditeľná a používateľ má dve možnosti
Kliknite na tlačidlo zdieľanie miesta, aby ste zdieľali miesto aj s členmi konverzácie C.
Kliknite na konci tlačidlo zdieľanie miesta. Zobrazí sa pop-up, ktorý umožňuje používateľovi buď úplne vypnúť zdieľanie miesta, alebo prestať zdieľať svoju polohu len s členmi konverzácie C.
Vklopené okno
Ak je okno odklonené, používateľ nebude môcť kliknúť na tlačidlo zdieľanie umiestnenia, pretože okno už nie je pripojené k konverzácii. Ak chcete začať zdieľanie umiestnenia s novými ľuďmi, musí používateľ znovu zadržať okno. Upozorňujeme, že odklonovanie okna neovplyvní žiadne pokračujúce zdieľanie umiestnenia. Okrem toho kliknutie na tlačidlo zdieľanie umiestnenia, zatiaľ čo okno je odklonené, zastaví všetky súčasné zdieľanie umiestnenia a nebude sa zobrazovať žiadne vypuknutie, ktoré umožní používateľovi vybrať konkrétny rozhovor, s ktorým sa zastaví zdieľanie.
Mnohé účty
Každý účet má svoju vlastnú unikátnu mapu. Ak používateľ rozpína mapu, keď je na účte A, potom prejde na účet B a rozpína mapu, budú viditeľné dve mapy. Mapy pre účty A a B zobrazujú pozície, ktoré sú s týmito účtami zdieľané, a sú úplne oddelené od seba.
Ako to funguje?
Úvod
Táto funkcia je rozdelená do troch častí:
Posielať svoju pozíciu
Získanie pozície
Predstavenie pozície
Na určenie polohy sa používa [Qt Positioning]https://doc.qt.io/qt-6/qtpositioning-index.html) API. Po určení polohy sa posiela ako správa na DHT a je prenášaná klientovi.
Poslanie pozície
Hneď ako je mapa otvorená, trieda Positioning
sa postará o získanie súčasnej pozície pomocou triedy QGeoPositionInfoSource
z modulu QtPositioning
. Pozícia sa potom pretvára do formátu JSON a prenáša sa do positionManager
. Táto trieda koordinuje celý proces zdieľania pozícií. Pozícia sa potom zdieľa prostredníctvom funkcie sendPosition()
.
Lokálne prostredníctvom signálu
localPositionReceived
, aby používateľ mohol vidieť svoju vlastnú polohuNa DHT sa všetky konverzácie v zozname
positionShareConvIds_
. Tento zoznam obsahuje kľúče všetkých konverzácií, s ktorými chce používateľ zdieľať svoju pozíciu.
V prípade, že sa táto položka nachádza v položke 1 alebo v položke 2 alebo v položke 2 alebo v položke 2 alebo v položke 2 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 sa použije v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 alebo v položke 3 pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod pod
Typ (poslúženie polohy alebo zastavenia)
Šírokosť
Dĺžka
Čas (nepoužívaný QtClientom)
Príklad údajov: {\"lat\":45.51616583988481,\"dlhý\":-73.620693,\"čas\":1671658862000,\"typ\":\"Posícia\"}
Pri odoslaní polohy demónu sa prenáša aj autorova URI.
Keď používateľ prestane zdieľať svoju pozíciu s konverzáciou, ID konverzácie sa jednoducho odstráni z zoznamu positionShareConvIds_
.
Získanie pozície
Keď sa pozícia prijme, spustí slot „onPositionReceived() “ Či už je to miestna pozícia z modulu QtPositioning
alebo pozícia z iného kontaktu. Na úrovni positionManager
v zozname objectListSharingUris_
sa ukladajú všetky pozície klienta.
Pridané (URI nie je prítomný v zozname)
Aktualizované (URI je už prítomné v zozname)
Zmazané (typ = „Zastavba“)
Pozícia sa v zozname ukladá vo forme objektu typu positionObject
. Tento typ umožňuje sledovanie každej pozície. Ak sa pozícia neaktualizuje v určitom časovom rámci, je odstránená z zoznamu.
Predstavenie pozície
Keď je prijatá poloha (slot onPositionReceived()
spustovaná), poloha sa prenáša do Qml, ktorý zase posiela informácie do knižnice JavaScript [https://openlayers.org/] ]]https://openlayers.org/). Modul Qt WebEngine
umožňuje pristáť medzi webovou technológiou knižnice a Qml. Každá poloha je reprezentovaná vrstvou pridanou na mapu. Funkcia newPosition()
pridaje novú vrstvu, funkcia updatePosition()
aktualizuje koordináty vrstvy a funkcia removePosition()
odstráni vrstvu.