[QWebView] Utilisation de Google Maps
Bonjour,
Je suis entrain de réaliser un programme sous Qt afin de choisir un parcours sur Google map et l’intégrer dans ma base de donnée.
.pro
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
QT += network \
webkit \
xml \
xmlpatterns
TARGET = afficherGMap
TEMPLATE = app
SOURCES += main.cpp \
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
OTHER_FILES += map.html |
Dans mon .ui :
je crée une widget (widgetMap) dans ma main widget pour y loader ma page Google map.
Un bouton pour lancer l'affichage et je crée un slot.
.h:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
#include <QtGui/QtGui>
#include <QtCore>
#include <QtWebKit/QtWebKit>
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void load();
private:
Ui::MainWindow *ui;
QWebView *mView;
private slots:
void on_btnMap_clicked();
};
#endif // MAINWINDOW_H |
puis je me lance dans mon .cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::load()
{
mView = new QWebView( this );
mView->settings()->setAttribute( QWebSettings::JavascriptEnabled, true );
QString fileName = qApp->applicationDirPath() + "/map.html";
if( !QFile(fileName).exists() ) {
qDebug() << "File not found:" << fileName;
}
QUrl url = QUrl::fromLocalFile( fileName );
mView->load( url );
QGridLayout *layout = new QGridLayout(ui->widgetMap);
layout->addWidget( mView);
}
void MainWindow::on_btnMap_clicked()
{
load();
} |
Et là ma page html de google map se lance bien, centré à l'endroit voulu. Cependant les marqueurs et les prises de position gps lors d'un clique ne s'affichent pas.
mon fichier html (fonctionnel, testé dans firefox):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
<!DOCTYPE html>
<html>
<head>
<title>Controling Google Maps through Qt application</title>
<meta name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta charset="UTF-8">
<style type="text/css">
html, body, #map_canvas {
margin: 0;
padding: 0;
height: 90%;
}
</style>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var map;
var location1;
var location2;
var address1;
var address2;
var latlng;
var geocoder;
var myLatlng = new google.maps.LatLng(45.20297, 5.6995);
function initialize() {
var myOptions = {
zoom: 14,
center: new google.maps.LatLng(48.681894, 6.184845),
mapTypeId: google.maps.MapTypeId.HYBRID,
zoomControl: true,
zoomControlOptions: { style: google.maps.ZoomControlStyle.SMALL },
};
map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);
google.maps.event.addListener(map, 'click', function(event) {
placeMarker(event.latLng);
});
}
function placeMarker(location) {
var marker = new google.maps.Marker({
position: location,
map: map
});
document.getElementById("lat").innerHTML = location.lat();
document.getElementById("lon").innerHTML = location.lng();
document.getElementById("zoom_level").innerHTML = map.getZoom()+1;
map.setCenter(location);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map_canvas"></div>
<center>
<div>
lat:<span id="lat"></span> lon:<span id="lon"></span><br/>
zoom level: <span id="zoom_level"></span>
</div>
</center>
</body>
</html> |
Que me faut-il revoir avec mon QWebView pour que les markers et listener Google map fonctionnent dans mon programme?
Merci pour votre aide
Cordialement,
Washco