2010-12-29 7 views
2

Ich arbeite an einem Finger freundliche Browser Übung mit FlickCharm Beispiel und QtWebKit, hier ist all the source code Ich habe so weit.Qt 4.7: Trigger Kontextmenü durch Gesten

Ich möchte Kontext ausgelöst wird, um lange drücken (tap-and-hold), zur Zeit kann ich die QGestureEvent und Position in eventFilter() von

QGestureEvent *gestureEvent = dynamic_cast<QGestureEvent*>(event); 
if (gestureEvent) { 
    if (const QGesture *g = gestureEvent->gesture(Qt::TapAndHoldGesture)) { 
     if (g->state() == Qt::GestureStarted) { 
      qDebug() << "tap-n-hold event started"; 

      QWebView *webView = dynamic_cast<QWebView*>(object); 
      FlickData *w = d->flickData.value(webView); 
      qDebug() << w->pressPos; // get position 
     } 
    } 
} 

Mein erster Versuch erhalten wird, einen Rechtsklick Ereignis Simulation von sendEvent() mit :

QMouseEvent pressEvent(QEvent::MouseButtonPress, w->pressPos, 
    Qt::RightButton, Qt::RightButton, Qt::NoModifier); 
QApplication::sendEvent(webView->page(), &pressEvent); 

Es scheint, wie die Veranstaltung, hat senden, aber das Kontextmenü nicht auslösen, also habe ich versucht customContextMenu() und emittieren customContextMenuRequested() Signal direkt zu implementieren:

emit QWidget::customContextMenuRequested(w->pressPos); 

aber mit Fehler fehlgeschlagen:

error: cannot call member function ‘void QWidget::customContextMenuRequested(const QPoint&)’ without object 

Wie kann ich das Kontextmenü von QGestureEvent auslösen?

Antwort