Frage

Ich baue eine Qt-App mit Python, wo Sie bei einem (google) Karte zeigen und klicken kann und die Koordinaten des Ortes erhalten. Die Karte ist eine einfache HTML-Seite durch einen QWebView Laden angezeigt und der Benutzer kann Markierungen durch Klicken erstellen. Screenshot des Widgets nach auf der Karte klicken.

Aber ich habe Probleme, die gerade geklickt hat Standortkoordinaten zu Qt abzurufen zurück (so, dass ich sie als Variablen verwenden kann - und zum Beispiel zeigt sie in dem QLineEdits auf der oberen linke Ecke oben, als Strom Lage der Markierung).

Dies ist der relevante Teil der HTML-Datei:

<script type="text/javascript">
var map;
function initialize() { 
    var local = new google.maps.LatLng(-23.4,-40.3);
    var myOptions = {
        zoom: 5,
        center: local,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    } 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    google.maps.event.addListener(map, 'rightclick', function(event) {
        placeMarker(event.latLng);
    });
}

function placeMarker(location) {
    var clickedLocation = new google.maps.LatLng(location);
    var marker = new google.maps.Marker({
        position: location,
        map: map
    });

    map.setCenter(location);
}

function dummyTxt() {
    return 'This works.';
}
</script>

Ich habe mit evaluateJavaScript versucht, war aber nicht in der Lage, die Koordinaten abzurufen. Ich habe versucht, eine Funktion erstellt, die Position mit marker.getPosition() zugreifen, aber ohne Glück. Der Dummy unter Arbeiten obwohl ..

newplace = QWebView.page().mainFrame().evaluateJavaScript(QString('dummyTxt()'))

>>> print newplace.toString()
This works.

Alle Vorschläge, wie die Koordinaten zu Qt zurück zu bekommen?

Edit:

Hier ist der Code, der für mich gearbeitet:

def update_geo(self):
    # Capture coordinates of the last marker on the map.
    mark = self.map.page().mainFrame().evaluateJavaScript('document.getElementById("markerlocation").value').toString()
    # Convert string to list of floats, stripping parentheses.
    marker = str(mark).strip('()').split(', ')
    decimals = [float(c) for c in marker]

Voll Quelle in https://github.com/nelas/ veliger / Blob / Master / veliger.py # L2374

War es hilfreich?

Lösung

fand ich eine Arbeit um, damit es funktioniert, aber ich bin mir nicht ganz sicher, dass es der richtige Weg sein wird. Wie auch immer, das ist, was ich getan habe:

  1. Erstellen Sie einen versteckten Eingang in dem Körperabschnitt des HTML-Dokuments der Positionsdaten des Markers zu speichern:

    <body>
        (...)
        <input id="locationData" type="hidden">
        (...)
    </body>
    
  2. In dem JavaScript-Code, speichern Sie die Position der Markierung in dem verborgenen Eingang jedes Mal erstellt wird:

    function placeMarker(location) {
        (...)
        document.getElementById("locationData").value = marker.position;
        (...)
    }
    
  3. In Ihrem Qt Code, lesen Sie den Wert des verborgenen Eingangs mit dem Befehl:

    webView->page()->mainFrame()->findFirstElement("#locationData").evaluateJavaScript("this.value").toString();
    

Ich hoffe, es hilft!

Quelle: http://opendocs.net/qt/4.6/webkit-formextractor .html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top