【问题标题】:Mouse works but Touch doesnot work in QML鼠标工作,但触摸在 QML 中不起作用
【发布时间】:2017-02-24 20:18:16
【问题描述】:

我正在开发一个基于 RPI 和触摸屏并在前端使用 QML/Qt Quick 的项目。对于触摸屏,我使用的是 Adafruit 5 英寸触摸屏,它通过 microUSB 进行触摸响应。 RPI 桌面上的触摸工作正常,但是当我运行 QML 应用程序并尝试触摸按钮时,它没有响应。当按钮上有鼠标指针时,触摸响应。另外,我尝试使用以下方式旋转屏幕:

export QT_QPA_EGLFS_ROTATION=180

但没用。

我不知道我做错了什么?有没有人可以帮我解决这个问题。

提前致谢。

以下是我为运行应用程序而设置的参数。

#!/bin/sh
export LD_LIBRARY_PATH=/usr/local/qt5pi/lib
export QML_IMPORT_PATH=/usr/local/qt5pi/qml
export QML2_IMPORT_PATH=/usr/local/qt5pi/qml
export QT_QPA_PLATFORM=eglfs
export QT_QPA_EGLFS_TSLIB=1
export QT_QPA_EGLFS_HIDECURSOR=1
export QT_QPA_EGLFS_MOUSE_PARAMETERS=abs
export QT_QPA_EGLFS_PHYSICAL_WIDTH=210
export QT_QPA_EGLFS_PHYSICAL_HEIGHT=150

/usr/local/qt5pi/bin/qmlscene testQml.qml

测试代码testQml.qml

import QtQuick 2.0
Rectangle {
    id:rootTangle
    width:360
    height: 360
    color:"red"

    Rectangle {
        id: blueRec
        color: "blue"
        width: rootTangle.width/2
        height: rootTangle.height/6
        anchors.centerIn: rootTangle
        border.width:7
        border.color: "#000000"
        radius: 20
    }

    MouseArea {
        id:blueRecMouseArea
        anchors.fill:blueRec
        onClicked: {
            Qt.quit();
        }
    }
}

【问题讨论】:

    标签: qt raspberry-pi qml touchscreen adafruit


    【解决方案1】:
    1. 确保您的系统已经支持触摸屏输入,并且包括 libinput 或 tslib。您可以使用evtest 命令并触摸您的触摸屏来测试触摸事件是否到达 evdev。您也可以使用cat /dev/input/eventX | hexdump

    2. 直接从您的触摸屏驱动程序中读取
    3. 如果可行,那可能是input integration problem with Qt。您的选择是 libinput 或 evdev 直接。我建议您检查configure 日志,然后了解是否由于依赖检查失败而未构建某些模块。引用同一页:

    运行configure后,一定要检查它的输出。不是 由于启用了必要的 eglfs 后端、libudev 或 libinput 相应的配置测试失败是相当常见的问题 可以通过这种方式轻松快速地识别。当有一个 不需要的“否”结果,使用 -v 运行配置以打开详细输出 为了查看每个配置的编译器和链接器调用 测试。

    【讨论】:

    • 我检查了配置输出,我拥有所有必要的触摸文件,例如:eglfs.. 仍然出现此错误。
    • 好的,你知道你的触控设备的路径是什么吗?如果是的话,当你玩它时它会输出一些东西吗?还是作为标准鼠标处理,而不是触摸屏?
    【解决方案2】:

    尝试禁用内置输入处理程序 export QT_QPA_EGLFS_DISABLE_INPUT=1

    QT 使用 libinput 作为默认输入处理程序。如果您想使用另一个处理程序,则应禁用 libinput。影响将取决于您选择用什么替换 libinput。在 tslib 的情况下,它只支持单点触控。你可以阅读更多关于它here

    【讨论】:

    • 这有什么可能的影响吗?为什么你认为它会解决问题?
    • QT 使用 libinput 作为默认输入处理程序。如果您想使用另一个处理程序,则应禁用 libinput。影响将取决于您选择用什么替换 libinput。在 tslib 的情况下,它只支持单点触控。你可以阅读更多关于它here
    • 好信息,您应该将其包含在实际答案中,如果您这样做,您可能会得到一些支持
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2021-10-27
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多