您的位置:首页 > 运维架构 > Linux

【Linux开发】【Qt开发】嵌入式Qt程序使用触屏或USB鼠标方式

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

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

--------------------------------

首先说明一点,如果你有tq-2440板子,那么关于嵌入式qt程序开发及移植方法只要利用好

《天嵌科技出品--Qt程序开发完全手册之24小时超级版本_V2.5_20120106.pdf》

《天嵌科技出品-Linux移植之Step By Step.pdf》两本手册就能有所掌握。

如果单单只想移植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、构建文件系统)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐