Qt之支持usb触摸屏热插拔(Qt4.7)

环境:周立功的m3352的核心板,使用tslib,Qt4.7的环境下

usb触摸屏断开之后,即使重连,在已经运行的qt程序中,并且系统已经生成了触摸设备节点,qt程序也是不能恢复触摸。

解决方法:修改qt源码中的src/gui/embedded/qmousetslib_qws.cpp

在QWSTslibMouseHandlerPrivate::readMouseData()的开始处加入以下代码

void QWSTslibMouseHandlerPrivate::readMouseData() 
{
    if(!qt_screen)
        return;
    /* Support usb touchscreen hotplug */
    int version;
    if (ioctl(ts_fd(dev), EVIOCGVERSION, &version) < 0) {
        disconnect(mouseNotifier, 0, 0, 0);
        delete mouseNotifier;
        while (1) {
            if(open()) {
                mouseNotifier = new QSocketNotifier(ts_fd(dev), QSocketNotifier::Read, this);
                connect(mouseNotifier, SIGNAL(activated(int)), this, SLOT(readMouseData()));
                resume();
                return;
            }
            system("echo waiting for tp ...");
            system("sleep 1");
        }
    }
    /* end */
    ...
}

注:

  • 记得ioctl()的头文件, #include <sys/ioctl.h>
  • EVIOCGVERSION未定义 ,#define EVIOCGVERSION _IOR('E', 0x01, int) /* 获取驱动的版本信息*/

重新编译qt,将生成的libQtGui.so.4.7.3替换到机器上即可

这一次真的被搞死了,arm板子是周立功的m3352的核心板,一切都按照他给的参考资料,然后发现,实际里面的跟他们给的教程的build-qt是不一致的,使用新编译的库替换后,永远运行不成功,不是bus error,就是Segmentation fault

替换后的Qt4编译源码的build-qt.sh文件

#!/bin/sh


(echo yes) | \
./configure 							\
        -prefix /opt/qt /*指定路径*/         				\
        -embedded arm                                 		\
        -platform qws/linux-x86-g++     			\
        -xplatform qws/linux-arm-gnueabi-g++      		\
        -depths 16,18,24,32                             	\
        -no-mmx                                                 \
        -no-3dnow                                               \
        -no-sse                                                 \
        -no-sse2                                                \
        -no-glib                                                \
        -no-cups                                                \
        -no-largefile                                  		\
        -no-accessibility                              		\
        -no-openssl                                    		\
        -no-gtkstyle                                   		\
        -qt-mouse-pc                                   		\
        -qt-mouse-linuxtp                              		\
        -qt-mouse-linuxinput                   			\
        -plugin-mouse-linuxtp                   		\
        -plugin-mouse-pc                                	\
        -fast                                                   \
        -D QT_NO_QWS_CURSOR               			\
        -D QT_QWS_CLIENTBLIT                   			\
        -release                                                \
	-host-little-endian	-little-endian	\
        -opensource						\
        /* 添加内容 */
	-qt-mouse-tslib						\
	-I/opt/tslib/include					\
	-L/opt/tslib/lib					\

同时修改qt-everywhere-opensource-src-4.7.3/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf文件

#
# qmake configuration for building with arm-none-linux-gnueabi-g++
#

include(../../common/g++.conf)
include(../../common/linux.conf)
include(../../common/qws.conf)

# modifications to g++.conf
QMAKE_CC                = arm-none-linux-gnueabi-gcc -lts /* -lts为添加内容 */
QMAKE_CXX               = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK              = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-g++ -lts

# modifications to linux.conf
QMAKE_AR                = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-none-linux-gnueabi-objcopy
QMAKE_STRIP             = arm-none-linux-gnueabi-strip

load(qt_config)

参考Qt4.8.6支持USB触摸屏热插拔_kp339的博客-CSDN博客

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值