タッチパネルの互換性の問題を解決

1507 ワード

win 10システムを使用してタッチスクリーンが正常にタッチされているのに、win 7システムではタッチできないという問題を解決します.
問題のリストア
  • 以下のコードではwin 10タッチパネルは正常に動作しますが、win 7システムではタッチできません.
  • /* main.cpp */
    QQuickWidget view;
    view.setSource(QUrl("qrc:Main.qml"));
    view.show();
    
    /* Main.qml */
    Item {
        MouseArea {
            anchors.fill: parent
            onClicked: console.log(">>>>")
        }
    }

    もんだいぶんせき
      Qtのイベントキューをブロックすることにより、win 10システムにおけるタッチイベントは以下のように見える.
    QQuickMouseArea -> QEvent::TouchBegin
    ...
    QQuickMouseArea -> QEvent::TouchEnd
    ...
    QQuickWidget -> QEvent::MouseButtonPress
    QQuickWindow -> QEvent::MouseButtonPress
    QQuickMouseArea -> QEvent::MouseButtonPress

      win 7でのタッチイベント:
    QQuickMouseArea -> QEvent::TouchBegin
    ...
    QQuickMouseArea -> QEvent::TouchEnd
    ...
    QQuickWidget -> QEvent::MouseButtonPress
    QQuickWindow -> QEvent::MouseButtonPress


    問題解決
  • QWidgetの派生クラスにQEvent::MouseButtonPressのプロパティを設定します.たとえば、
  • view->setAttribute(Qt::WA_AcceptTouchEvents);
  • は、QTouchEventおよびQMouseEventイベントによって独立している.これらの合成イベントを設定するには、QCoreApplicationのsetAttributeのアプリケーションタグQt::WA_AcceptTouchEventsおよびQt::AA_SynthesizeTouchForUnhandledMouseEventsを使用して、マウスイベントまたはマウスイベントからタッチイベントへのタッチイベントの自動合成を有効または無効にします.
  • のうち、Qt::AA_SynthesizeMouseForUnhandledTouchEventsは、受け付けられないすべてのタッチイベントがマウスの左ボタンイベントに変換される.このアトリビュートは既定でオンです.