1、qt支持usb 触摸屏热插拔
当前环境:qt-everywhere-opensource-src-4.8.6 + tslib-1.4 + linux 2.6.35
测试发现,运行qt程序,当使用USB触摸屏时,在触摸屏拔出后触摸屏的event节点会消失,当再次插入触摸屏时,即使生成了相同的节点,屏幕已经不能点击了。
解决办法:修改qt源码,使qt支持触屏的热插拔。
使用的是tslib库,对应的源码在qt源码中的src/gui/embedded/qmousetslib_qws.cpp
增加:#include
在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替换到机器上即可。
阅读(2504) | 评论(0) | 转发(0) |