Qt 4.7: с помощью жеста вызвать контекстное меню - PullRequest
2 голосов
/ 29 декабря 2010

Я работаю над упражнением для пальцев с помощью примера FlickCharm и QtWebKit, вот весь исходный код , который у меня есть.

Я хочу вызвать контекст долгим нажатием (нажмите и удерживайте), в настоящее время я могу получить 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 Ответ

2 голосов
/ 29 декабря 2010

Вместо QMouseEvent попробуйте отправить QContextMenuEvent напрямую.

...