2010-05-22 22 views
4

我正在用Python創建一個Qt應用程序,您可以點擊並在(谷歌)地圖上單擊並獲取位置的座標。地圖通過QWebView加載一個簡單的HTML頁面顯示,用戶可以通過點擊來創建標記。在點擊地圖後,小部件的Screenshot使用QtWebKit在桌面應用程序中檢索谷歌地圖v3標記的位置

但是,我很難將剛剛點擊過的位置座標恢復到Qt(這樣我就可以將它們用作變量 - 例如,將它們顯示在上面的頂部角落的QLineEdit中,作爲標記的當前位置)。

這是HTML文件的相關部分:

<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> 

我一直在試圖與evaluateJavaScript,但無法獲取座標。我試圖創建一個函數來訪問marker.getPosition()的位置,但沒有運氣。下面的假人雖然工作..

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

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

關於如何獲得座標回Qt的任何建議?

編輯:

這裏是爲我工作的代碼:

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] 

https://github.com/nelas/veliger/blob/master/veliger.py#L2374

回答

1

我發現周圍的工作,使其工作全部源代碼,但我不很確定這將是正確的做法。無論如何,這是我做過什麼:

  1. 創建HTML文檔的主體部分隱藏的輸入,保存標記的位置數據:

    <body> 
        (...) 
        <input id="locationData" type="hidden"> 
        (...) 
    </body> 
    
  2. 在JavaScript代碼,保存該標記在隱藏的輸入每一個它的創建時間的位置:

    function placeMarker(location) { 
        (...) 
        document.getElementById("locationData").value = marker.position; 
        (...) 
    } 
    
  3. 在你的Qt代碼,閱讀與指令隱藏輸入的值:

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

我希望它能幫助!

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

+0

謝謝Mkfnx。確實有幫助!我只改變了Qtcode直接通過js:webview.page()。mainFrame()。evaluateJavaScript('document.getElementById(「markerlocation」)。value')。toString() – nelas 2010-05-24 05:29:55

+0

我沒有注意到javascript替代。我很高興看到它的幫助! – 2010-05-29 00:18:23