上文《嵌入式Qt开发-移植到ARM开发板 》介绍了Qt程序的移植,本文再说下如何使开发板Qt程序使用触摸屏或USB方式进行交互。


之前刚把一个qt程序移植到arm板上成功运行显示时就开心的要死(Linux用了很久,但从未搞过Qt界面开发),嘿嘿~,但是插上鼠标尝试点个按钮的时候就心碎了,鼠标不能动(开来当时真的吧linux当做xp使用了),然后又试了下触摸屏,也不行!!卧槽,对于我这种从未搞过这个的小牛来说真的无助了,傍边也没个人问,那就自己满网络搜索了。最后也是下载了天嵌的一些资料才让我有了点思路。现做如下总结。
--------------------------------
首先说明一点,如果你有tq-2440板子,那么关于嵌入式qt程序开发及移植方法只要利用好

如果单单只想移植tslib触屏驱动,直接参见《TQ-2440触摸屏tslib驱动移植 》即可。
下面简单说明下如何在tq-2440板子上运行qt程序时正常使用触摸屏或usb鼠标进行交互操作。

Qt使用触屏或USB鼠标
首先必须保证已具备以下条件:
1)还是假设已经变编译了并能保证能在开发板上运行的qt界面程序"hello"(不会编译的回头看下《嵌入式Qt开发-移植到ARM开发板 》吧)。假设hello程序移植到开发板"/opt/qt-4.5/bin/"下。
2)已经成功qt移植到开发板。假设“/opt/EmbedSky/qt-4.5/__install/arm/”目录下的“lib/”目录移植到开发板的“/opt/qt-4.5/”目录下(删掉除去“fonts/”目录和“*.so*”文件外的其他文件),“/opt/EmbedSky/qt-4.5/__install/arm/”下的“plugins/imageformats/”目录移植到开发板的“/opt/qt-4.5/”目录下。
3)及已编译好的tslib触屏驱动(参考《TQ-2440触摸屏tslib驱动移植 》)。
4)已成功移植tslib到开发板。假设tslib的bin下面的所有文件移植到开发板中的/sbin中,tslib的etc下面的ts.conf移植到开发板中的/etc中,tslib的lib下面的所有库文件移植到开发板的/lib下。

tslib已经有了,要使用触摸屏无非就是设置开发板linux环境变量,这方面在《TQ-2440触摸屏tslib驱动移植 》已经有所提及,比较提倡的做法就是写一个专门配置并运行hello程序的脚本。

1、在开发板/bin目录下新建一个qt4文件,然后输入以下内容:

#!/bin/sh
echo Start Qt-4.5 > /dev/console
export set HOME=/root
export set QTDIR=/opt/qt-4.5
export set QPEDIR=/opt/qt-4.5
export set QWS_DISPLAY="LinuxFB:/dev/fb0"
export set QWS_DISPLAY="LinuxFB:mmWidth130:mmHeight100:0"
export set QWS_KEYBOARD="TTY:/dev/tty1"
if [ -f /sys/devices/virtual/input/input1/uevent ] ; then
export set TSLIB_TSDEVICE=/dev/event1
export set TSLIB_CALIBFILE=/etc/pointercal
export set TSLIB_CONFFILE=/etc/ts.conf
export set TSLIB_PLUGINDIR=/lib/ts
export set QWS_MOUSE_PROTO="TSLIB:/dev/event1 Intellimouse:/dev/mouse0"
else export set QWS_MOUSE_PROTO="Intellimouse:/dev/mouse0"
if [ -f /etc/pointercal ] ; then
echo only use mouse > console
else
echo "1 0 1 0 1 1 65536" >/etc/pointercal
fi
fi export set QT_PLUGIN_PATH=$QTDIR/plugins/
export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/
export set PATH=$QPEDIR/bin:$PATH
export set LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/plugins/imageformats:$LD_LIBRARY_PATH
if [ -f /etc/pointercal ] ; then
$QPEDIR/bin/hello -qws 1>/dev/null 2>/dev/null
else
ts_calibrate
# mousecalibration
$QPEDIR/bin/hello -qws 1>/dev/null 2>/dev/null
fi

关于各变量解释详见《TQ-2440触摸屏tslib驱动移植 》



其中:

export set QTDIR=/opt/qt-4.5
export set QPEDIR=/opt/qt-4.5
export set QT_PLUGIN_PATH=$QTDIR/plugins/

export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/

export set PATH=$QPEDIR/bin:$PATH

export set LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/plugins/imageformats:$LD_LIBRARY_PATH
用于指定移植过后qt文件所在路径。

其他的都是用于指定触屏或usb鼠标交互方式:

if [ -f /sys/devices/virtual/input/input1/uevent ] ; then
export set TSLIB_TSDEVICE=/dev/event1
export set TSLIB_CALIBFILE=/etc/pointercal
export set TSLIB_CONFFILE=/etc/ts.conf
export set TSLIB_PLUGINDIR=/lib/ts
export set QWS_MOUSE_PROTO="TSLIB:/dev/event1 Intellimouse:/dev/mouse0"
else
export set QWS_MOUSE_PROTO="Intellimouse:/dev/mouse0"
if [ -f /etc/pointercal ] ; then
echo only use mouse > console
else
echo "1 0 1 0 1 1 65536" >/etc/pointercal
fi
fi

if中判断触屏是否存在并可用,以确定是否设置触屏方式,如果存在则设置成触屏、鼠标共存方式:

export set QWS_MOUSE_PROTO="TSLIB:/dev/event1 Intellimouse:/dev/mouse0"
若触屏不可用(或不存在)则仅使用鼠标方式:
export set QWS_MOUSE_PROTO="Intellimouse:/dev/mouse0"
--------

if [ -f /etc/pointercal ] ; then
$QPEDIR/bin/hello -qws 1>/dev/null 2>/dev/null
else
ts_calibrate
# mousecalibration
$QPEDIR/bin/hello -qws 1>/dev/null 2>/dev/null
fi

这里是判断是否需要对触屏进行校准,主要是判断校准后的数据文件(/etc/pointercal)是否存在,如果此文件存在则说明已经校准,这是无需再校准,直接运行hello程序。如果不存在则说明还未校准,这时会先运行ts_calibrate程序进行校准(mousecalibration也是一个Qt4自带的校准程序),然后再运行hello程序。


说明:这只是一种方式,还可以直接在开发板/etc/profile文件中设置这些环境变量,但是对比与这种脚本的方式明显没有优势。建议将每个移植的qt程序都写成脚本的方式运行。

2、设置开机自启动
修改1中脚本qt4的属性为777(chmod 777 /bin/qt4).
修改系统文件“/etc/init.d/rcS”,加入以下内容:
-----------------------------------
qt4 &
-----------------------------------

注意:这里需要说明一点,根据linux启动过程发现,/etc/init.d/rcS文件会在/etc/profile之前执行,所以,如果选择自启动的运行方式,那么qt及tslib环境变量的设置放在/etc/profile里面将不合适,这种情况下请使用本文中的脚本方式。

以上的设置仅对于当前arm开发板中的linux系统而言,如果此linux坏掉了,再重新烧写uboot,内核级文件系统之后这些移植文件及设置全部失效,这时需要打破为零从头再来,一种一劳永逸的方法就是设计自己的适合嵌入式qt开发的文件系统,这样每次重新烧写玩内核级文件系统好之后就可直接使用。一般的嵌入式qt开发都会制作一个已移植qt及tslib的文件系统,关于文件系统制作详见《天嵌科技出品-Linux移植之Step
By Step.pdf》
相关章节(Step11、构建文件系统)。

【Linux开发】【Qt开发】嵌入式Qt程序使用触屏或USB鼠标方式的更多相关文章

  1. 【Windows 10 应用开发】如何防止应用程序被截屏

    今天老周只想跟大伙们分享一个小技巧,是的,小小的技巧,很简单,保证你能学会的,要是学不会,可以考虑跳泰山. 有些时候,我们可能会想到不要让应用程序界面上显示的内容被截屏,要阻止应用界面呈现在截图上,可 ...

  2. 【Qt开发】【Linux开发】Qt程序在嵌入式设备(arm) 上运行,鼠标擦除界面的解决方案

    笔者最近想在arm开发板上,开发一个应用程序,经过网上查询发现qt作为跨平台开发软件很不错,于是便选择了qt开发,笔者的qt版本是4.8.6的.由于arm的主频太低,在arm上进行开发编译,效率会大大 ...

  3. 【Qt开发】解决Qt程序在Linux下无法输入中文的办法

    解决Qt程序在Linux下无法输入中文的办法 一位网友问我如何在Linux的Qt的应用程序中输入中文,我一开始觉得不是什么问题,但是后面自己尝试了一下还真不行.不仅是Qt制作的应用程序,就连Qt Cr ...

  4. 嵌入式Qt开发环境的搭建详解

    一.嵌入式Qt开发环境的搭建前奏 1.下载arm-linux-gcc-4.4.3-20100728.tar.gz 2.下载qt-everywhere-opensource-src-4.8.5.tar. ...

  5. 基于arm的嵌入式QT开发(课程设计)

    一. 项目要求 配置QT5.7基于x86及arm 等两种CPU架构的调试及开发环境: 移植arm编译后的QT5.7及屏幕校准工具tslib1.4至CORTEX ARM9实验平台: 开发基于QT5.7的 ...

  6. C、C++、boost、Qt在嵌入式系统开发中的使用

    概述 嵌入式系统开发相对来说属于偏底层的开发,也就是与硬件结合比较紧密,只能使用C/C++语言.对于做平台开发的人来说,C语言真的是很"古老"的语言,属于操作系统语言!好多人会觉得 ...

  7. Eclipse+Qt开发环境设置(Linux和Win)

    文章摘要: Windows,Linux平台下安装使用Eclipse + QT4.4.3开发环境 Windows,Linux新建project时的配置(不使用QT预置项目类型,而是手工配置) 使用Ecl ...

  8. 用 Qt Creator 开发非 Qt 的 C/C++ 程序

    在Windows还是习惯用VS2005但是现在到了Linux下,开发起来C/C++程序就没有那么得心应手的IDE了.虽然很多人推荐E开头那个主要作为Java开发的IDE,不过安上插件后感觉不大好,一个 ...

  9. 【Qt开发】01-第一个Qt程序Hello World!

    一:说在前头 我的第一份工作是做生产工具,当时用的MFC,IDE是VC6.0,现在想想真是古董级别,10年至今,微软也一直没有对MFC进行升级, 冥冥中感觉微软自己都放弃MFC了,市场上貌似MFC的岗 ...

随机推荐

  1. Tomcat的3种部署方式

    tomcat部署的三种方式及优缺点对比 部署方法一:将编译成功的web项目直接放到webapps目录中(注意是编译成功的web项目,也可以是war包):   部署方式二:修改tomcat安装目录下的  ...

  2. 树莓派GPIO引脚标识图

  3. php实现hashTable

    Hash表作为最重要的数据结构之一,也叫做散列表.使用PHP实现Hash表的功能.PHP可以模拟实现Hash表的增删改查.通过对key的映射到数组中的一个位置来访问.映射函数叫做Hash函数,存放记录 ...

  4. linux运维、架构之路-Logstash启动时指定jdk版本

    一.修改bin/logstash vim /app//logstash-6.7.0/bin/logstash export JAVA_CMD="/app/jdk1.8.0_11/bin&qu ...

  5. python中的文件读取

    ---恢复内容开始--- r模式,只读模式,不可写入,文件不存在会报错 #r模式,能读不能写,文件不存在会报错 f = open('a1.txt')#不写'r',默认只读 result = f.rea ...

  6. 运维工程师之IDC系列

    因为我公司在用浪潮服务器,所以说链接暂时是浪潮服务器 1.用UltraISO制作U盘启动安装系统  链接 http://www.4008600011.com/archives/8816 ones 刻录 ...

  7. Ubuntu ssh秘钥生成

    一,秘钥生成传送 ssh-keygen 选项: -b:指定密钥长度: -e:读取openssh的私钥或者公钥文件: -C:添加注释: -f:指定用来保存密钥的文件名: -i:读取未加密的ssh-v2兼 ...

  8. linux-history-ps1-1

    1.串行端口终端(/dev/ttySn) 串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备.计算机把每个串行端口都看作是一个字符设备.有段时间这些串行端口设备 ...

  9. Javascript高级程序设计第三版-笔记

    1.JS数值最大值最小值: >Number.MIN_VALUE <5e-324 >Number.MAX_VALUE <1.7976931348623157e+308 判断数值是 ...

  10. 湖南省第十二届省赛:Parenthesis

    Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n and q questions. The i-t ...