タッチパネルの互換性の問題を解決
1507 ワード
win 10システムを使用してタッチスクリーンが正常にタッチされているのに、win 7システムではタッチできないという問題を解決します.
問題のリストア以下のコードではwin 10タッチパネルは正常に動作しますが、win 7システムではタッチできません.
もんだいぶんせき
Qtのイベントキューをブロックすることにより、win 10システムにおけるタッチイベントは以下のように見える.
win 7でのタッチイベント:
問題解決 QWidgetの派生クラスに は、QTouchEventおよびQMouseEventイベントによって独立している.これらの合成イベントを設定するには、QCoreApplicationのsetAttributeのアプリケーションタグ のうち、
問題のリストア
/* 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
問題解決
QEvent::MouseButtonPress
のプロパティを設定します.たとえば、view->setAttribute(Qt::WA_AcceptTouchEvents);
Qt::WA_AcceptTouchEvents
およびQt::AA_SynthesizeTouchForUnhandledMouseEvents
を使用して、マウスイベントまたはマウスイベントからタッチイベントへのタッチイベントの自動合成を有効または無効にします.Qt::AA_SynthesizeMouseForUnhandledTouchEvents
は、受け付けられないすべてのタッチイベントがマウスの左ボタンイベントに変換される.このアトリビュートは既定でオンです.