我正在努力确定某个触摸屏是否与某个应用程序兼容,并且最近获得了 Elo 2402L 触摸屏的借用型号。我已经安装了该公司提供的驱动程序,并且能够使用 evtest
实用程序(/dev/input/eventX 的解析器)查看多点触控事件。
问题是我正在运行 Scientific Linux 6.4,它使用 Linux 内核 2.6.32。我见过很多关于 3.x.x 之前的 Linux 内核触摸屏兼容性的混合信息。 Elo 说他们的驱动程序仅支持 2.6.32 的单点触摸。另外,我看到有人说这个内核版本中触摸事件的兼容性问题大部分与 Xorg 接口(interface)有关。
我开发了一个非常简单的Qt5应用程序来测试Qt是否可以检测触摸事件,因为我不确定Qt应用程序是否基于X以及它们是否直接从/dev/input<读取事件/strong> 或其他东西。
但是,尽管一个简单的鼠标事件处理程序能够正确注册鼠标事件,但我还创建了一个简单的触摸事件处理程序,并且当我触摸主屏幕时没有任何反应。有一声蜂鸣声,因为 Elo 提供的驱动程序的一部分在触摸屏幕时会发出蜂鸣声,所以我知道有东西正在注册该触摸,但桌面和该应用程序似乎都无法识别触摸事件。
此外,是,WA_AcceptTouchEvents 属性在窗口的构造函数中设置为 true。
我有一个简单的 mainwindow.h:
...
protected:
int touchEvent(QTouchEvent *ev);
...
和mainwindow.cpp:
MainWindow::MainWindow(QWidget *parent) {
...
setAttribute(Qt::WA_AcceptTouchEvents, true);
touchPoints = 0;
}
...
int MainWindow::touchEvent(QTouchEvent *ev) {
switch(ev->type()) {
case QEvent::TouchBegin:
touchPoints++;
break;
case QEvent::TouchEnd:
touchPoints--;
break;
}
ui->statusBar->showMessage("Touch Points: " + touchPoints);
}
我使用触摸事件处理程序的方式有问题吗?还是设备本身有问题? Qt 是直接从 /dev/input 读取输入事件,还是从 X 获取输入事件?
这里非常困惑,因为我以前没有使用过 Qt,并且想在我说是设备导致问题之前缩小原因范围。
此外,如果有人对设备/内核兼容性问题有任何见解,那将非常有帮助。
最佳答案
QTouchEvent
documentation说:
Touch events occur when pressing, releasing, or moving one or more touch points on a touch device (such as a touch-screen or track-pad). To receive touch events, widgets have to have the Qt::WA_AcceptTouchEvents attribute set and graphics items need to have the acceptTouchEvents attribute set to true.
可能您只需要在 MainWindow
构造函数中调用 setAttribute(Qt::WA_AcceptTouchEvents, true)
即可。
关于c++ - Qt5 未注册触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56262776/