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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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