Qt支持USB触摸屏热插拔

最近测试发现,运行qt程序,当使用USB触摸屏时,在触摸屏拔出后触摸屏的event节点会消失,当再次插入触摸屏时,即使生成了相同的节点,屏幕已经不能点击了。

解决办法:

解决办法:修改qt源码,使qt支持触屏的热插拔,使用的qt库为4.8.6

因为使用的是使用的是tslib库,对应的源码在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 */
    ...
}

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

 

你可能感兴趣的:(linux,qt4,usb)