我在 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
在我看来,触摸屏充当鼠标,因此只会产生鼠标事件。
现在这可能超出了本论坛的范围?