PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Qt] Google Maps mit QWebView (Javascript?)


Djon
2011-07-11, 18:06:21
Hallo!

Ich habe eine Qt-Applikation und möchte eine Anbindung an Google Maps haben. Ich möchte dem Benutzer die Möglichkeit geben, seine Koordinaten zu bestimmen. Der Benutzer wählt einen Kartenausschnitt aus und das Programm bestimmt die Koordinaten des Kartenausschnitts und gibt diese dann aus. Wie kann ich es mit Hilfe von QWebView machen? Geht das über Javascript?

Vielen Danke im Voraus!

Gruß Djon

Marscel
2011-07-11, 21:13:51
Dürfte hinhauen, hab mit dem API ganz gute Erfahrungen gemacht:

Unter Qt heißt das, was du im QWebFrame brauchst addToJavaScriptWindowObject() und evaluateJavaScript().

Im Skript dann auf Event waren: http://code.google.com/intl/de/apis/maps/documentation/javascript/reference.html#MouseEvent

Djon
2011-07-11, 21:58:05
Hallo!

Danke für den Hinweis... Könntest du mir vielleicht noch ein Beispiel für den Aufruf der Methode "getBounds()" geben?

Vielen Dank im Voraus!

Gruß Djon

Marscel
2011-07-11, 22:45:47
var map = new google.maps.Map(document.getElementById("karten-container"), {
zoom: 10,
center: new google.maps.LatLng(52.50, 13.34),
mapTypeId: google.maps.MapTypeId.ROADMAP
});

google.maps.event.addListener(map, "bounds_changed", function() {
var boundaries = map.getBounds();
alert("Ausschnitt: " + boundaries.toString());
});

Nervt dich ständig mit den neuen Rahmenkoordinaten, wenn du irgendwas änderst.

Djon
2011-07-12, 17:03:34
Hallo!

Irgendwie stehe ich jetzt auf dem Schlauch... Ich habe die von dir geposteten Anweisungen einer QStringList zugewiesen und sobald die GoogleMaps-Seite fertiggeladen wurde mit Hilfe der Methode "evaluateJavaScript()" (QString.join("\n")) ausgeführt. Leider gab es keine Rückmeldung :confused:

Gruß Djon

Marscel
2011-07-12, 21:56:09
Laut Signatur bist du von uns beiden der Entwickler. :uhippie:

Funktioniert bei mir ohne Anstand.

Setzt natürlich voraus, das du ne Seite lädst, die einen Container mit der ID enthält. Oder du versuchst es als String zu injecten, setHtml() im View oder WebFrame.

Djon
2011-07-14, 16:40:36
Hallo!

Bist du vielleicht so nett und schickst mir dein Quellcode zu? DANKE! :biggrin:

Gruß Djon

Marscel
2011-07-14, 18:19:50
#include <QtGui>
#include <QWebView>
#include <QWebFrame>
#include <QStringList>

int main(int argc, char** argv) {
QApplication app(argc, argv);

QWidget window;
window.resize(500, 500);
window.show();
window.setWindowTitle(QApplication::translate("test", "webview"));

QWebView webview(&window);
webview.move(1, 1);
webview.resize(490, 490);
webview.show();

QWebPage* page = webview.page();
QWebFrame* frame = page->mainFrame();
QStringList sample_code;
sample_code << "<html><head><title>demo</title>"
<< "<script type=\"text/javascript\" src=\"http://maps.google.com/maps/api/js?sensor=false\"></script>"
<< "<script type=\"text/javascript\">function init() { var map = new window.google.maps.Map(document.getElementById(\"map-container\"), {"
<< " zoom: 10,"
<< " center: new google.maps.LatLng(52.50, 13.34),"
<< " mapTypeId: google.maps.MapTypeId.ROADMAP"
<< "});"
<< "google.maps.event.addListener(map, \"bounds_changed\", function() {"
<< " var boundaries = map.getBounds();"
<< " alert(\"Ausschnitt: \" + boundaries.toString());"
<< "}); }</script>"
<< "</head><body onload=\"init()\">Map:"
<< "<div id=\"map-container\" style=\"height: 100%; width: 100%;\"></div>"
<< "</body></html>";
frame->setHtml(sample_code.join(""));
return app.exec();
}

Wie du das mit dem Draggen/Zoom der Maus hinkriegst, musst du selber rausfinden, so ein paar Lösungen existieren da im Netz (http://developer.qt.nokia.com/forums/viewthread/1643).

Außerdem ist das nur Proof-of-Concept, das JS kannst du vielleicht - schöner - auch in einem LoadCompleted-Signal ausführen lassen.

Und wenn dus verkaufst, will ich ne Erwähnung :ugly:

Djon
2011-07-19, 19:20:44
Hallo!

Vielen Dank für deine Hilfe! Funktioniert wurderbar!
Es handelt sich um keine kommerzielle Anwendung sondern dient nur dem privaten Gebrauch :biggrin:

Gruß Djon