2

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 でコンテキスト メニューをトリガーするにはどうすればよいですか?

4

1 に答える 1

2

の代わりに、を直接QMouseEvent送信してみてください。QContextMenuEvent

于 2010-12-29T08:34:52.883 に答える