首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt5不注册触摸事件

Qt5不注册触摸事件
EN

Stack Overflow用户
提问于 2019-05-22 18:18:48
回答 1查看 2.1K关注 0票数 2

我正在确定某个触摸屏是否与应用程序兼容,并最近获得了Elo2402L触摸屏的外借模型。我已经安装了公司提供的驱动程序,并且能够使用evtest实用程序(evtest解析器)看到多点触摸事件。

问题是,我运行的是科学Linux 6.4,它使用Linux内核2.6.32。在3.x.x之前,我看到了许多关于Linux内核的触摸屏兼容性的混合信息。Elo说他们的司机只支持2.6.32的单触控。此外,我看到人们说,在这个内核版本中,触摸事件的大多数兼容性问题都与Xorg接口有关。

我开发了一个非常简单的Qt5应用程序来测试Qt是否能够检测触摸事件,因为我不确定Qt应用程序是否基于X,以及它们是否直接从/dev/input或其他地方读取事件。

然而,尽管简单的鼠标事件处理程序能够正确地注册鼠标事件,但我也创建了一个简单的触摸事件处理程序,当我触摸主屏幕时没有发生任何事情。当屏幕被触摸时,Elo提供的驱动程序发出哔哔声,所以我知道有东西在注册触摸,但桌面和应用程序似乎都不认识触摸事件。

另外,在yes中,WA_AcceptTouchEvents属性在窗口的构造函数中设置为true。

我有一个简单的主窗口

代码语言:javascript
复制
...
protected:
    int touchEvent(QTouchEvent *ev);
...

和mainwindow.cpp:

代码语言:javascript
复制
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,在我说这是导致问题的设备之前,我想缩小原因。

而且,如果有人对设备/内核兼容性问题有任何深入了解,那将是非常有帮助的。

EN

回答 1

Stack Overflow用户

发布于 2019-05-22 18:33:28

QTouchEvent 文档说:

触摸事件发生时,按下,释放,或移动一个或多个触摸点的触摸设备(如触摸屏或跟踪垫)。要接收触摸事件,小部件必须具有Qt::WA_AcceptTouchEvents属性集,而图形项需要将acceptTouchEvents属性设置为true。

您可能只需要在setAttribute(Qt::WA_AcceptTouchEvents, true)构造函数中调用MainWindow

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56262776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档