LinuxでQt 4を使用しています。
タッチスクリーン ディスプレイ用のアプリケーションを実装しており、マウスとキーボードも接続しています。
マウスまたはタッチスクリーンのいずれかを実装できますが、相互にうまく作用しないため、両方を実装することはできません。主な問題は、マウスをクリックするかタッチスクリーンを押すと、次のイベントがトリガーされることです。
(注:必要なことができるように、この機能を再実装しました)
MainWindow::mousePressEvent(QMouseEvent *ev)
{
// Handle mouse specific events
}
ただし、タッチスクリーンを押すと、同じ機能もトリガーされます:(
したがって、マウスのクリックとタッチスクリーンの押下を区別できません! – この問題を回避するにはどうすればよいですか? マウス クリックかタッチスクリーン プレスかを判断するにはどうすればよいですか?
イベントの種類を調べてみましたが、常に = 2 (mouseClickEvent ですが、TouchBegin などはありません) です。現在、私はここで立ち往生しています:(
編集:
私はこれをさらに調べて、次のようなものを実装しました:
MainWindow::MainWindow(QWidget *parent)
{
...
qApp->installEventFilter(this);
setAttribute(Qt::WA_AcceptTouchEvents);
setAttribute(Qt::WA_TouchPadAcceptSingleTouchEvents);
}
bool MainWindow::eventFilter(QObject *, QEvent * pEvent)
{
switch(pEvent->type())
{
case QEvent::TouchBegin:
qDebug("BEGIN");
break;
case QEvent::TouchUpdate:
qDebug("UPDATE");
break;
case QEvent::TouchEnd:
qDebug("END");
break;
case QEvent::MouseMove:
qDebug("MOUSE");
break;
};
return false;
}
タッチスクリーン入力かマウス入力かに関係なく、常に MouseMove イベントを取得することがわかりました。
ハードウェアの設定は、タッチ スクリーンがタッチ スクリーンではなくマウスのように動作するように設定する必要があると判断しました (可能な場合)。だから私は /dev/inputs/ を印刷して見ました:
root@dm814x-evm:/dev/input# ls -l
drwxr-xr-x 2 root root 180 Jan 1 2000 by-id
drwxr-xr-x 2 root root 180 Jan 1 2000 by-path
crw-r----- 1 root root 13, 64 Jan 1 2000 event0
crw-r----- 1 root root 13, 65 Jan 1 2000 event1
crw-r----- 1 root root 13, 66 Jan 1 2000 event2
crw-r----- 1 root root 13, 67 Jan 1 2000 event3
crw-r----- 1 root root 13, 68 Jan 1 2000 event4
crw-r----- 1 root root 13, 69 Jan 1 2000 event5
crw-r----- 1 root root 13, 70 Jan 1 2000 event6
crw-r----- 1 root root 13, 71 Jan 1 2000 event7
lrwxrwxrwx 1 root root 69 May 1 08:11 keyboard -> /dev/input/by-id/usb-Cypress_WinCE_USB_Keyboard___PS2_Mouse-event-kbd
lrwxrwxrwx 1 root root 6 Jan 1 2000 keypad -> event2
crw-r----- 1 root root 13, 63 Jan 1 2000 mice
crw-r----- 1 root root 13, 32 Jan 1 2000 mouse0
crw-r----- 1 root root 13, 33 Jan 1 2000 mouse1
crw-r----- 1 root root 13, 34 Jan 1 2000 mouse2
crw-r----- 1 root root 13, 35 Jan 1 2000 mouse3
lrwxrwxrwx 1 root root 67 May 1 08:11 touchscreen -> /dev/input/by-id/usb-eGalax_Inc._USB_TouchController-event-joystick
root@dm814x-evm:/dev/input/by-id# ls -l
lrwxrwxrwx 1 root root 9 Jan 1 2000 usb-Cypress_WinCE_USB_Keyboard___PS2_Mouse-event-kbd -> ../event0
lrwxrwxrwx 1 root root 9 Jan 1 2000 usb-Cypress_WinCE_USB_Keyboard___PS2_Mouse-event-mouse -> ../event1
lrwxrwxrwx 1 root root 9 Jan 1 2000 usb-Cypress_WinCE_USB_Keyboard___PS2_Mouse-mouse -> ../mouse0
lrwxrwxrwx 1 root root 9 Jan 1 2000 usb-eGalax_Inc._USB_TouchController-event-joystick -> ../event3
lrwxrwxrwx 1 root root 9 Jan 1 2000 usb-eGalax_Inc._USB_TouchController-event-mouse -> ../event6
lrwxrwxrwx 1 root root 9 Jan 1 2000 usb-eGalax_Inc._USB_TouchController-joystick -> ../mouse1
lrwxrwxrwx 1 root root 9 Jan 1 2000 usb-eGalax_Inc._USB_TouchController-mouse -> ../mouse3
タッチスクリーンがマウスとして機能しているため、マウスイベントのみが生成されるようです。
これは、このフォーラムの範囲を超えている可能性がありますか?