Lokacija deljenje na QT stranki

Kako ga uporabiti?

Trivialna uporaba

Če je Location Services omogočen na napravi, se bo na mapi prikazala lokacija uporabnika, skupaj z lokacijo vseh drugih članov, ki delijo svojo lokacijo (od vseh pogovorov izbranega računa). Uporabnik lahko prekliče izmenjavo lokacije in izklop z klikom na gumb za izmenjavo lokacije.

Ko uporabnik deli svojo lokacijo v pogovoru, se na ikoni pogovora pojavi rdeča ikona lokacije. Če uporabnik prejme lokacijo od drugega člana, se na vseh pogovorih, v katerih je član prisoten, prikaže oranžna ikona lokacije.

Uporabnik lahko interakcijo z zemljevidom z uprezering, zooming in ven, premikanje in zapiranje.

Napredna uporaba

Večkratno delitev

scenarij

Uporabnik že deli lokacijo z pogovorom A in pogovorom B.

Funkcija

Če uporabnik preide na pogovor C, je mapa še vedno vidna in uporabnik ima dve možnosti

  1. Kliknite gumb za delitev lokacije, da se lahko delite tudi z člani pogovora C.

  2. Kliknite gumb končnega deljenja lokacije. To bo pokazalo v vtis, ki uporabniku omogoča, da popolnoma izključi deljenje lokacije ali pa samo preneha deliti svojo lokacijo z člani pogovora C.

Vklopljeno okno

Če je okno odklopljeno, uporabnik ne bo mogel klikniti gumb za delitev lokacije, ker okno ni več povezano z pogovorom. Če želite začeti delitev lokacije z novimi ljudmi, morate ponovno priključiti okno. Upoštevajte, da odklopljanje okna ne vpliva na stalno delitev lokacije. Poleg tega bo klik na gumb za delitev lokacije, medtem ko je okno odklopljeno, ustavilo vse trenutno delitev lokacije in ne bo pojavila vtiska, ki bi uporabniku omogočila, da izbere določen pogovor, s katerim se bo prenehal deliti.

Več računov

Vsak račun ima svojo edinstveno zemljevid. Če uporabnik razkloni zemljevid, ko je na računu A, nato preide na račun B in razkloni zemljevid, bodo vidne dve zemljevidovi. zemljevid za račune A in B prikazujejo položaje, ki so v skupini z njimi in so popolnoma ločeni drug od drugega

Kako to deluje?

Vvod

Ta značilnost je razdeljena na tri dele:

  1. Poslanje položaja.

  2. Prijemajo položaj

  3. Prikaz položaja

Za določitev lokacije se uporablja API [Qt Positioning]https://doc.qt.io/qt-6/qtpositioning-index.html). Ko je bila lokacija določena, se pošlje kot sporočilo na DHT in se prenaša klijentu.

Poslanje pozicije

Ko je mapa odprta, se razred Positioning poskrbi za pridobivanje trenutne pozicije z uporabo razreda QGeoPositionInfoSource modula QtPositioning.

  • Lokalno preko localPositionReceived signala, tako da lahko uporabnik vidi svojo lastno lokacijo

  • Na DHT vse pogovore v seznamu positionShareConvIds_. Ta seznam vsebuje ključe vseh pogovorov, s katerimi želi uporabnik deliti svojo pozicijo.

V obliki JSON položaja je naslednje:

  • Vrsta (posnetek o položaju ali zaustavitvi)

  • Širinska širina

  • Dolžina

  • Čas (ne uporablja QtClient)

Primer podatkov: {\"lat\":45.51616583988481,\"dolg\":-73.620693,\"čas\":1671658862000,\"tip\":\"Poseditev\"}

Ko pošljemo položaj demonu, se prenese tudi avtorjev URI.

Ko uporabnik preneha deliti svojo stališče s pogovorom, se ID pogovorov preprosto odstrani iz seznama positionShareConvIds_.

Prijemajo položaj

Ko se pozicija prejme, se sproži razdelek „onPositionReceived() „. Ne glede na to, ali gre za lokalno pozicijo iz modula QtPositioning ali pozicijo iz drugega stika.

  • Dodajanje (URI ni na seznamu)

  • Občasni (URI je že prisoten na seznamu)

  • Izbrišeno (tip = „Stop“)

V seznamu se položaj shranjuje v obliki predmeta tipa positionObject. Ta tip omogoča nadzor za vsako položaj. Če položaj ni posodobljen v določenem časovnem okviru, se odstrani iz seznama.

Prikaz položaja

Ko je pozicija prejeta (slot onPositionReceived() ) sprožena), se pozicija prenaša v Qml, ki je na svoj način poslala informacije v knjižnico JavaScript [https://openlayers.org/]. Modul Qt WebEngine omogoča most med knjižnično spletno tehnologijo in Qml. Vsako pozicijo predstavlja vrsti, dodana na zemljevid. Funkcija newPosition() dodaja novo vrstico, funkcija updatePosition() posodablja koordinate vrstice, funkcija removePosition() odstranjuje vrstico.