上文《嵌入式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. APIview的请求生命周期源码分析

    目录 APIview的请求生命周期源码分析 请求模块 解析模块 全局配置解析器 局部配置解析器 响应模块 异常处理模块 重写异常处理函数 渲染模块 APIview的请求生命周期源码分析 Django项 ...

  2. 对html2canvas的研究

    介绍 该脚本允许您直接在用户浏览器上截取网页或部分网页的“屏幕截图”.屏幕截图基于DOM,因此它可能不是真实表示的100%准确,因为它没有制作实际的屏幕截图,而是根据页面上可用的信息构建屏幕截图. 这 ...

  3. Shell-06 函数

    Shell-06 函数 #编写脚本,使用chkconfig命令,循环执行,关闭所有5级别服务 #!/bin/bash name=`chkconfig --list | cut -d' ' -f1` f ...

  4. 图片转base64使用JSON传输

    要传输的JSON格式: { "orderId":"0001", "cargoReceiptNo":"iVBORw0KGgoAAAA ...

  5. ArrayList的contains()和HashSet的contains()效率比较

    ArrayList的contains(Object o)方法内部只有一行代码:判断indexOf(0)是否大于等于0.而indexOf(o)内部会从头遍历数组,直到某位置的元素等于o,极端情况下,要把 ...

  6. csp-s2019 AFO记

    DAY 0 上午出发前大家都很颓废的样子. 我因为还没有实现刷完NOIP专题的所有题的目标而去憨比的学DDP. 最后还是不会,保卫王国是写不成了…… 该走了,学校领导来开了个欢送会,祝福我们从里WA到 ...

  7. java中的浅拷贝和深拷贝

    复制 将一个对象的引用复制给另一个对象,一共有三种方式.第一种方式是直接赋值,第二种方式是浅复制,第三种方式是深复制. 1.直接赋值 在Java中,A a1 = a2,这实际上复制的是引用,也就是说 ...

  8. BZOJ 3168 Luogu P4100 [HEOI2013]钙铁锌硒维生素 (矩阵求逆、二分图匹配)

    线性代数+图论好题. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3168 (luogu) https://www.lu ...

  9. 双重Iterator 报错!!!!

    List list = new ArrayList(); list.add(new String[]{"0","s1","0038",&qu ...

  10. css中如何使用border属性与display属性

    border属性介绍 border属性设置元素边框. 边框3个要素如:粗细.线型.颜色. 边框线型属性值说明表如: 属性指 描述 none 定义无边框. hidden 与 "none&quo ...