2012-03-25 35 views
3

Ich lerne HTML5 und testen die neuen Funktionen auf einer Qt-Hybrid-Anwendung. Jetzt arbeite ich an einem einfachen Geolocation-Beispiel, aber wenn ich rufe, navigator.geolocation.getCurrentPosition (displayLocation); Es scheint, dass das QtWebKit es nicht unterstützt, aber gemäß dieser http://trac.webkit.org/wiki/QtWebKitFeatures22 unterstützt die Version von QtWebKit, die mit Qt4.8.0 kommt, Geolocation.Qt WebKit und HTML5 Geolocation

Dies ist der Code, ich verwende:

window.onload = function() 
{ 
    getMyLocation();  
} 

function getMyLocation() 
{ 
    if(navigator.geolocation) 
    { 
     navigator.geolocation.getCurrentPosition(displayLocation);   
    } 
    else 
    { 
     alert("No geolocation support"); 
    } 
} 

function displayLocation(position) 
{ 
    var latitude = position.coords.latitude; 
    var longitude = position.coords.longitude; 

    var div = document.getElementById("location"); 

    div.innerHTML = "You are at Latitude: " + latitude + ", Longitude: " + longitude; 
} 

Und auf der Seite Qt:

QWebView* MyWindow::createWebView() 
    { 
     QWebSettings* default_settings = QWebSettings::globalSettings(); 
     default_settings->setAttribute(QWebSettings::JavascriptEnabled,true); 
     default_settings->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled,true); 
     default_settings->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled,true); 
     default_settings->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls,true);   
     default_settings->setAttribute(QWebSettings::LocalStorageEnabled,true); 
     default_settings->setAttribute(QWebSettings::JavascriptCanAccessClipboard,true); 
     default_settings->setAttribute(QWebSettings::DeveloperExtrasEnabled,true); 

     QWebView* web_view = new QWebView(this); 

     connect(web_view->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), 
       this, SLOT(addJavascriptObject())); 

     inspector_->setPage(web_view->page()); 

     inspector_->setVisible(true); 
     inspector_->show(); 

     web_view->load(QUrl("qrc:/html/geolocation_example.html")); 

     return web_view; 
    } 

Jeder weiß, wie Html5 Geolocation für eine Qt Desktop-Anwendung zu aktivieren?

Antwort

2

Sie müssen die Unterklasse QWebPage ableiten und einen Signalhandler für das Signal QWebPage::featurePermissionRequested(QWebFrame*, QWebPage::Feature) erstellen.

Hier ist eine Referenzimplementierung:

class WebPage : public QWebPage 
{ 
    Q_OBJECT 

    public: 
     WebPage(QObject* parent = 0) : 
      QWebPage(parent) 
     { 
      connect(this, SIGNAL(featurePermissionRequested(QWebFrame*, QWebPage::Feature)), SLOT(permissionRequested(QWebFrame*, QWebPage::Feature))); 
     } 

     virtual ~WebPage() 
     { 
     } 

    private slots: 
     void permissionRequested(QWebFrame* frame, QWebPage::Feature feature) 
     { 
      setFeaturePermission(frame, feature, PermissionGrantedByUser); 
     } 
}; 

Verwenden QWebView::setPage() mit einer Instanz neu erstellten Unterklasse QtWebKit verwenden Ihre QWebPage Implementierung zu machen.

Falls Sie weitere Hilfe benötigen, werfen Sie einen Blick auf die QtMiniBrowser, die Teil des WebKit.org-Repository ist. Der Quellcode ist von hier aus verfügbar http://trac.webkit.org/browser/trunk/Tools/QtTestBrowser

+0

Das Problem ist, dass es nicht einmal aufrufen navigator.geolocation.getCurrentPosition (displayLocation); Es kann nicht finden navigator.geolocation – userX731

+0

userX731, haben Sie das jemals herausgefunden? – jdcravens

+0

Ich habe versucht, dies mit PyQt4 zu implementieren, aber das featurePermissionRequested-Signal scheint nie zu feuern. – Snorfalorpagus

Verwandte Themen