我在Linux上使用Qt 4。按下觸摸屏觸發mousePressEvent,如何確定鼠標點擊或觸摸屏是否點擊?
我實現了用於觸摸屏顯示的應用程序,我也有一個鼠標和鍵盤插上。
我可以實現的小鼠或觸摸屏,但不能同時因爲他們彼此交互嚴重。主要問題是,當我點擊鼠標或按下觸摸屏時,我會觸發以下事件。
(注:我重新實現此功能,這樣我可以做到這一點的東西,我需要)
MainWindow::mousePressEvent(QMouseEvent *ev)
{
// Handle mouse specific events
}
然而,當我按下觸摸屏我也得到了同樣的功能觸發:(
我因此無法區分鼠標點擊和觸摸屏按鍵! - 我該如何解決這個問題?我怎樣才能確定它是否是鼠標點擊或觸摸屏按?
我曾嘗試查看事件類型,但其始終= 2(mouseClickEvent,但neve 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 /看到:
[email protected]:/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
[email protected]:/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
在我看來,觸摸屏是作爲一個鼠標,因此只會產生鼠標事件。
現在,這可能是超出了本次論壇的範圍是什麼?
我認爲這更多的是與Linux的問題。在過去,當處理Windows觸摸事件時,操作系統中有一個設置來停止觸發事件作爲鼠標事件發送。在OSX上它只是按預期工作。我認爲你需要在Qt之外尋找它,因爲它聽起來像操作系統在Qt接收它們之前將觸摸轉換爲鼠標事件。 – TheDarkKnight
@ Merlin069哈哈,我只是來同可能的結論:)我說我的編輯下一些更多的信息,但我也認爲這可能是超出範圍爲這個論壇...我應該把它移動到超級用戶? –