zoukankan      html  css  js  c++  java
  • 【Linux开发】【Qt开发】嵌入式Qt程序使用触屏或USB鼠标方式

    上文《嵌入式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 &
    -----------------------------------
    嵌入式Qt程序使用触屏或USB鼠标方式 - dingmz_frc - dingmz_frc的博客

    注意:这里需要说明一点,根据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、构建文件系统)。
  • 相关阅读:
    Java基础知识学习10-常用的API-01
    Java基础知识学习09-final、static关键字、匿名对象、内部类、修饰符、代码块
    Java基础知识学习08-构造方法
    前端网页学习01
    Java基础知识学习07-抽象类、接口、多态
    Java基础知识学习06-封装、继承
    Java基础知识学习05-类与对象
    Java基础知识学习04-自定义类、ArrayList集合
    Java基础知识学习03-数组
    1.9 向线程传递参数
  • 原文地址:https://www.cnblogs.com/huty/p/8518280.html
Copyright © 2011-2022 走看看