Quantcast
Channel: Qt DevNet forums: Qt WebKit
Viewing all articles
Browse latest Browse all 542

Zoom with QPinchGesture in QWebView with Google Maps

$
0
0
Hi I am working on an application for touch screen devices using Google Maps functionality. So far I have been able to insert the map using a QWebView and loading an html file containing Javascipt. Currently, the user can perform panning in the map using finger strokes and/or the control buttons in Google Maps. Zooming can also be performed using the control buttons integrated in the map. What I now want, and is struggeling with, is being able to zoom in the map using pinching with the fingers. I have researched the web, and found several methods, but I can’t seem to get it working. This is the code I have now: mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H   #include <QMainWindow> #include <QtWebKit/QtWebKit> #include <QtWebKit/QWebElement> #include <QtWebKitWidgets/QWebPage> #include <QWebFrame> #include <QGestureEvent> #include <QPinchGesture>     namespace Ui {     class MainWindow; }   class MainWindow : public QMainWindow {     Q_OBJECT     public:     explicit MainWindow(QWidget *parent = 0);     ~MainWindow();   public slots:     void on_btnMyLocation_clicked();   private slots:     void linkClicked(const QUrl &url);   protected:     bool event(QEvent* event);     private:     Ui::MainWindow *ui;     bool gestureEvent(QGestureEvent *event);     void pinchTriggered(QPinchGesture*);     void printLatLong(); };   #endif // MAINWINDOW_H mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QString>   MainWindow::MainWindow(QWidget *parent) :     QMainWindow(parent),     ui(new Ui::MainWindow) {     ui->setupUi(this);     ui->webView->grabGesture(Qt::PinchGesture);     ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);     ui->webView->setAttribute(Qt::WA_AcceptTouchEvents, false);     connect( ui->webView, SIGNAL(linkClicked(const QUrl &)), this, SLOT(linkClicked(const QUrl &)), Qt::DirectConnection);     ui->webView->load(QUrl("file:///C:/Qt/Qt5.1.0/Tools/QtCreator/bin/MapTestQt/google_maps.html"));       // Calling method for printing Latitude and Longitude     printLatLong(); }   MainWindow::~MainWindow() {     delete ui; } bool MainWindow::event(QEvent *event) {     if(event->type() == QEvent::Gesture)     {         return gestureEvent(static_cast<QGestureEvent*>(event));     }     return QWidget::event(event); }   bool MainWindow::gestureEvent(QGestureEvent *event) {     if(QGesture *pinch = event->gesture(Qt::PinchGesture))     {         pinchTriggered(static_cast<QPinchGesture *>(pinch));     }     return true; }   void MainWindow::pinchTriggered(QPinchGesture* gesture) {     QWheelEvent wheelEvent(gesture->centerPoint().toPoint(), gesture->scaleFactor() - gesture->lastScaleFactor(), Qt::NoButton, Qt::NoModifier);     QApplication::sendEvent(this, &wheelEvent); }   void MainWindow::linkClicked(const QUrl &url) {     ui->webView->load(url); }   void MainWindow::on_btnMyLocation_clicked() {     // Calling method for printing Latitude and Longitude     printLatLong(); } void MainWindow::printLatLong(){     // Creating QVariant variable     QVariant lat;     // Getting my latitude from javascript method     lat = ui->webView->page()->mainFrame()->evaluateJavaScript("returnLatitude()");     // Printing my latitude to label     ui->labMyLatitude->setText(lat.toString());       // Creating QVariant variable     QVariant lng;     // Getting my longitude from javascript method     lng = ui->webView->page()->mainFrame()->evaluateJavaScript("returnLongitude()");     // Printing my longitude to label     ui->labMyLongitude->setText(lng.toString()); } With this code, no interaction with the map works at all using touch events (mouse works), but when I comment out line 10 in mainwindow.cpp (ui->webView->grabGesture), it works like described above. Also, as an aditional question: In my Javascript, navigator.geolocation returns false. Do I have to set any special permission in the QWebView? Thanks for any help.

Viewing all articles
Browse latest Browse all 542

Trending Articles