开发者

Map doesn't respond on mouse clicks with Google Maps API V3 and QWebView

开发者 https://www.devze.com 2023-03-09 16:24 出处:网络
EDIT 4 All this while I was thinking that it is the markers problem, that they do not get dragged! Now I have realized, that NO mouse click works on the map when it is displayed in Qt widget.

EDIT 4

All this while I was thinking that it is the markers problem, that they do not get dragged! Now I have realized, that NO mouse click works on the map when it is displayed in Qt widget.

The following code, I pasted in an HTML file and opened through Firefox, this worked flawlessly! and the same doesn't respond when I click on the map on QtWidget :rolleyes:

Can anyone confirm this for me or tell me what wrong I am doing?

Google Maps JavaScript API Example

<sc开发者_如何学编程ript type="text/javascript"> 

var map;    
var latlng            = new google.maps.LatLng (34.7607233, -117.0107599);

var directionsDisplay = new google.maps.DirectionsRenderer ();;
var directionsService = new google.maps.DirectionsService ();

var pointsArray       = new Array();
var arrayToBeReturned = new Array();

function initialize ()
{
    var myOptions = 
    {
        zoom:8,
        center:latlng,
        mapTypeId:google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map (document.getElementById ("map"), myOptions);
    directionsDisplay.setMap (map); 

    google.maps.event.addListener (map, "click", function ()
                        {
                            alert("You clicked the map.");
                        });
    }

</script> 
</head>
<body onload="initialize()" topmargin="0" leftmargin="0">
<div id="map" style="width: 341px; height: 271px"></div>
<div id="directionsPanel" style="float:right;width:30%;height 100%"></div>
</body>
</html> 


You are looking at the wrong place for the events :) In the references each object have their own events. You can see the ones for markers here:

[http://code.google.com/apis/maps/documentation/javascript/reference.html#Marker][1]

I have used the dragend event plenty of times and it works smoothly.

The code to do it could be:

    var map = new google.maps.Map(document.getElementById("map"), myOptions);

    var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        draggable: true
    });

    google.maps.event.addListener(marker, 'dragend', function () {
        document.getElementById("txtLatitude").value = marker.getPosition().lat();
        document.getElementById("txtLongitude").value = marker.getPosition().lng();
    });

[1]: http://code.google.com/apis/maps/documentation/javascript/reference.html#Markermap = new


Found the solution:

Add this class in the source file where you are "loading" the HTML file (containing Javascript API) in the Qt widget.

class myWebPage : public QWebPage
{
    virtual QString userAgentForUrl(const QUrl& url) const {
        return "Chrome/1.0";
    }
};

Then in your own class in the same source file, add the setPage function call as shown below and see the magic happen!

MainScreen::MainScreen(QWidget *parent):QWidget(parent)
{
        ...
    ***map->setPage (new myWebPage());***
    map->load (QUrl("./index.html") ) ;
};


google.maps.event.addListener (initialPointMarker, 'click', 
                                  function () { map.closeInfoWindow(); });

How about single quotes around the click arguement

0

精彩评论

暂无评论...
验证码 换一张
取 消