Qt 4.7:通过手势触发上下文菜单

时间:2010-12-29 03:10:45

标签: qt4 webkit gesture

我正在使用FlickCharm示例和QtWebKit进行手指友好的浏览器练习,到目前为止这里是all the source code

我希望通过长按(点击并按住)触发上下文,目前我可以通过

获取QGestureEvent和eventFilter()中的位置
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 
        }
    }
}

我的第一次尝试是使用sendEvent()模拟右键单击事件:

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

似乎事件发送了,但没有触发上下文菜单,所以我尝试直接实现customContextMenu()并发出customContextMenuRequested()信号:

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

但因错误而失败:

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

如何通过QGestureEvent触发上下文菜单?

1 个答案:

答案 0 :(得分:2)

而不是QMouseEvent,请尝试直接发送QContextMenuEvent