当前位置: 首页 > news >正文

嵌入式Linux Qt触摸屏问题诊断与解决报告

目录

1. 问题现象回顾

2. 核心问题分析:为何触摸不准?

3. 解决问题的关键步骤及原理解析

第一步:校准 (Calibrate) - 训练“翻译官”

第二步:配置 (Configure) - 确保Qt使用正确的“翻译官”

1. 移除冲突项:unset QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS

2. 指定正确的插件:export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1

4. 结论

嵌入式Qt/Tslib环境变量永久化配置命令


1. 问题现象回顾

您最初遇到的问题是,在i.MX6ULL板子上运行Qt应用程序时,触摸屏响应异常:

  1. 触摸不准:触摸点与屏幕光标或响应位置严重偏移。

  2. 响应区域错误:似乎只有一个固定的点能够被点击,或者触摸效果混乱。

ts_test 输出的原始数据(一系列变化的X/Y坐标)来看,触摸屏硬件本身和底层驱动(goodix-ts)是正常工作的,因为它能够连续上报坐标数据。这说明问题出在从原始坐标到屏幕坐标的转换和应用层面

2. 核心问题分析:为何触摸不准?

这个问题的核心在于**“原始物理坐标”“屏幕逻辑坐标”**之间没有建立正确的映射关系。

  • 原始物理坐标:触摸屏IC(Goodix芯片)检测到触摸后,上报的是它自己内部的坐标值。这个坐标系范围可能与屏幕分辨率(例如800x480)完全不同,而且可能存在线性偏差、旋转或镜像(X/Y轴颠倒)。

  • 屏幕逻辑坐标:这是LCD显示屏的像素坐标,是Qt应用程序所理解的坐标系。

tslib 这个库的核心作用,就是充当这两者之间的“翻译官”。但要让它正确翻译,我们必须先“训练”它。

3. 解决问题的关键步骤及原理解析

我们的解决方案主要包含两个关键步骤:校准配置

第一步:校准 (Calibrate) - 训练“翻译官”

操作运行 ts_calibrate 程序。

原理ts_calibrate 程序的作用就是建立上述的映射关系。当您在屏幕上点击它显示的五个十字准星时,您正在告诉tslib

  • “看,触摸屏上报的这个 原始坐标A,它实际对应的应该是屏幕左上角的 像素坐标(x1, y1)。”

  • “这个 原始坐标B,对应的应该是右上角的 像素坐标(x2, y2)。”

  • ...以此类推。

通过这几个样本点,ts_calibrate 会运用线性代数算法,计算出一个精确的转换矩阵 (transformation matrix)。这个矩阵包含了进行缩放、平移和旋转所需的所有参数。

计算出的结果会以7个数字的形式被保存在您指定的文件 /etc/pointercal 中。之后,tslib 在处理任何触摸事件时,都会读取这个文件,用里面的参数去“翻译”每一个原始坐标,从而得到一个精确的屏幕坐标。

在您校准之前,/etc/pointercal 文件要么不存在,要么数据是错误的,导致tslib无法正确翻译,Qt应用收到的自然是混乱的坐标,从而引发了触摸不准的问题。

第二步:配置 (Configure) - 确保Qt使用正确的“翻译官”

仅仅校准好还不够,我们还必须明确地告诉Qt:“请使用 tslib 来处理触摸事件,不要用自己的方式去解读原始数据。” 这是通过配置环境变量实现的。

1. 移除冲突项:unset QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS

原理QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS 这个变量是让Qt的 evdev 插件直接去配置输入设备。这会让Qt绕过 tslib,直接去读取 /dev/input/event1 的原始数据。因为 evdev 插件本身不知道如何去解析 /etc/pointercal 校准文件,所以它拿到的坐标是未经“翻译”的原始坐标,结果自然是错误的。这条命令清除了可能导致冲突的配置,是至关重要的一步。

2. 指定正确的插件:export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1

原理: 这个环境变量是解决问题的“金钥匙”。它非常明确地告诉Qt QPA(Qt Platform Abstraction)层:

  • tslib:请加载名为 tslib 的通用插件。

  • :/dev/input/event1:这个 tslib 插件需要处理的设备是 /dev/input/event1

设置后,Qt应用程序的事件处理流程就变成了:

硬件触摸 -> 驱动/dev/input/event1 -> tslib (读取pointercal进行校准) -> Qt应用程序

这样一来,Qt接收到的所有触摸坐标都已经是经过 tslib 精确校准过的,触摸自然就准确了。

4. 结论

总而言之,您的触摸屏问题是一个典型的“校准与配置”问题,而不是硬件或驱动问题。我们通过以下逻辑链条解决了它:

  1. 确认硬件/驱动正常:通过 ts_test 查看原始数据流,确认底层OK。

  2. 解决数据转换问题:运行 ts_calibrate 生成校准文件 /etc/pointercal,为 tslib 提供了正确的“翻译规则”。

  3. 解决应用层配置问题:通过设置正确的Qt环境变量,强制Qt使用经过 tslib 校准后的数据流,并移除了可能导致冲突的 evdev 直接配置。

经过这番操作,数据从底层到应用层的通路被彻底打通并校正,触摸屏恢复正常。

嵌入式Qt/Tslib环境变量永久化配置命令

请完整复制以下所有命令,然后粘贴到您的设备终端中,一次性执行即可。

# 步骤一:使用cat命令和“here document”技术,直接在/etc/目录下创建并写入set_qt_env.sh脚本文件。
# 这样做可以避免手动编辑文件的繁琐和可能出现的错误。
cat << 'EOF' > /etc/set_qt_env.sh
#!/bin/sh# 1. 设置 TSLIB 相关的环境变量
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_FBDEVICE=/dev/fb0# 2. 设置 QT 相关的环境变量, 告诉QT使用tslib
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1# 3. (可选) 为Qt程序添加字体路径, 避免中文或特殊字符显示为方框
# 如果您有字体文件, 可以取消下面这行的注释, 并将路径修改为您的字体库路径
# export QT_QPA_FONTDIR=/usr/share/fonts/
EOF# 步骤二:为刚刚创建的脚本文件添加可执行权限。
# 只有这样,系统才能在启动时执行它。
chmod +x /etc/set_qt_env.sh# 步骤三:将加载脚本的命令添加到全局配置文件/etc/profile的末尾。
# ". /etc/set_qt_env.sh" 的意思是 "source /etc/set_qt_env.sh",即执行该脚本。
# 我们会先检查该行配置是否已存在,避免重复添加。
if ! grep -q ". /etc/set_qt_env.sh" /etc/profile; thenecho "" >> /etc/profileecho "# Load Qt and Tslib environment variables" >> /etc/profileecho ". /etc/set_qt_env.sh" >> /etc/profileecho "配置成功写入 /etc/profile"
elseecho "配置已存在于 /etc/profile, 无需重复添加。"
fi# 完成提示
echo "所有配置已完成!请执行 'reboot' 命令重启您的设备以使设置永久生效。"
http://www.dtcms.com/a/446092.html

相关文章:

  • gRPC从0到1系列【20】
  • CTFHub 信息泄露通关笔记10:SVN泄露(2种方法)
  • 手机网站开发环境搭建网站建设个人网银
  • 使用 jintellitype 库在 Java 程序中实现监听 Windows 全局快捷键(热键)
  • Python驱动Ksycopg2连接和使用Kingbase:国产数据库实战指南
  • 广州网站网站建设福建建站公司
  • ⚡ arm 32位嵌入式 Linux 系统移植 QT 程序
  • VR大空间资料 02 —— 常用Body IK对比
  • 什么是网站建设需求重庆建设工程信息网查询系统
  • 高校思政专题网站建设南京有哪些知名的网站建设
  • 【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
  • ionic 浮动框详解与应用
  • 开源 C++ QT QML 开发(五)复杂控件--Gridview
  • 下载建设银行官方网站工程承包合同协议书
  • 第九章:装饰器模式 - 动态增强的艺术大师
  • OpenAI 发布 GPT-5 Instant:AI 有了 “情感温度计“
  • 苏州做网站公司选苏州聚尚网络做百度百科的网站
  • SSE与轮询技术实时对比演示
  • 示范专业网站建设深圳联雅网站建设
  • php 8.4.13 更新日志
  • MongoDB 认证失败(错误码 18)
  • 深圳网站建设主页什么公司需要建立网站吗
  • 陕西省建设信息管理网站网站开发 家具销售 文献
  • 数学标准库
  • 怎么做跳转不影响原网站排名云抢购网官方网站
  • 漳州手机网站建设公司陕西专业网站建设哪家好
  • 利用 VsCode + EIDE 进行嵌入式开发(保姆级教程)
  • 长春企业网站制作优化微商好货源app下载
  • PlayerChoice系统介绍
  • 网站要实名认证旅游网站建设方案之目标