QtEmbedded鼠标驱动流程分析(下)
来源:互联网 发布:linux性能监控 协议 编辑:程序博客网 时间:2024/05/07 17:35
Qt代码版本:qt-embedded-linux-opensource-src-4.5.2
在上篇中,我们提到了
src/gui/embedded/qmousedriverfactory_qws.cpp 中
QMouseDriverFactory::create(…)函数加载一个QMouseHandler的地方,那么我今天就接着地方往下讲,我们以tslib为例来讲解
133 #ifndef QT_NO_QWS_MOUSE_TSLIB134 if (driver == QLatin1String("tslib") || driver.isEmpty())135 return new QWSTslibMouseHandler(key, device);136 #endif
要使135行的QWSTslibMouseHandler能够正常被加载,需要注意两个条件
1. 就是133行的那个宏,如果你在编译Qt-Embedded的时候没有加“-qt-mouse-tslib”选项的话,那么该宏会被使能,那么134,135自然不会被编译咯。
当然,如果你编译Qt-Embedded的时候,使用“-plugin-mouse-tslib”,那么下面的代码
142 #if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL)143 #ifndef QT_NO_LIBRARY144 if (QWSMouseHandlerFactoryInterface *factory = qobject_cast(loader()->instance(driver)))145 return factory->create(driver, device);146 #endif147 #endif
会去插件目录下找到对应的代码,不是我们要要讨论的重点。
2. 134行的driver名字来自于QWS_MOUSE_PROTO环境变量中的冒号前那一部分.例如”tslib:/dev/ts”中tslib就是driver,/dev/ts就是device。 名字不能搞错:)
如果前面两部分都没有问题,可以进入实现代码看看了
src/gui/embedded/qmousetslib_qws.cpp
320 QWSTslibMouseHandler::QWSTslibMouseHandler(const QString &driver,321 const QString &device)322 : QWSCalibratedMouseHandler(driver, device)323 {324 d = new QWSTslibMouseHandlerPrivate(this, device);325 }
看来默默无闻的做着后勤工作的还是QWSTslibMouseHandlerPrivate
136 QWSTslibMouseHandlerPrivate::QWSTslibMouseHandlerPrivate(QWSTslibMouseHandler *h,137 const QString &device)138 : handler(h), dev(0), mouseNotifier(0), jitter_limit(3)139 {140 QStringList args = device.split(QLatin1Char(':'), QString::SkipEmptyParts);//..............148 devName = args.join(QString());150 if (devName.isNull()) {151 const char *str = getenv("TSLIB_TSDEVICE");152 if (str)153 devName = QString::fromLocal8Bit(str);154 }156 if (devName.isNull())157 devName = QLatin1String("/dev/ts");159 if (!open())160 return;165 mouseNotifier = new QSocketNotifier(fd, QSocketNotifier::Read, this);166 connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData()));168 }
一些不重要的代码被我删掉了,通过上面代码可以明白,如果在QWS_MOUSE_PROTO没写设备名,还可以通过环境TSLIB_TSDEVICE得到,如果TSLIB_TSDEVICE也没有设置,那么就会使用设备/dev/ts,你需要搞清你的驱动建立的设备名是什么。
165,166行是关键的两行,这表明Qt会通过QSocketNotifier监视你的鼠标设备上是否有新的数据传入,如果有则通过readMouseData()读取数据。
226 void QWSTslibMouseHandlerPrivate::readMouseData()227 {//............285 if (calibrated) {286 // tslib should do all the translation and filtering, so we send a287 // "raw" mouse event288 handler->QWSMouseHandler::mouseChanged(p, pressed);289 } else {290 handler->sendFiltered(p, pressed);291 }292 }293 }
readMouseData()中大部分代码都是读取鼠标数据的,我们更关心把数据送到哪里去,那么我们看290行的sendFilterer(…)
src/gui/embedded/qmouse_qws.cpp
604 bool QWSCalibratedMouseHandler::sendFiltered(const QPoint &position, int button)605 {//.......642643 mouseChanged(transform(pos), button);644 sent = true;//.......651 }在我快没有耐心的时候终于看到了我想看到的代码259 void QWSMouseHandler::mouseChanged(const QPoint &position, int state, int wheel)260 {261 mousePos = position + d_ptr->screen->offset();262 QWSServer::sendMouseEvent(mousePos, state, wheel);263 }
在这里把鼠标事件正式交给QWSServer,感兴趣的话可以接着往下跟踪,应该会进入Qt的事件处理。
- QtEmbedded鼠标驱动流程分析(下)
- QtEmbedded鼠标驱动流程分析(上)
- WinCE 5.0下鼠标键盘驱动分析
- WinCE 5.0下鼠标键盘驱动分析
- WinCE 5.0下鼠标键盘驱动分析
- WinCE 5.0下鼠标键盘驱动分析
- WinCE 下鼠标键盘驱动分析
- WinCE 下鼠标键盘驱动分析
- Embeded QT 鼠标驱动流程和类结构分析
- 鼠标键盘驱动分析
- usb鼠标驱动分析
- WinCE 5.0下鼠标键盘驱动分析 续2
- WinCE 5.0下鼠标键盘驱动分析续
- WinCE 5.0下的鼠标键盘驱动分析
- 串口驱动流程分析
- 网卡驱动流程分析
- MTK平台下Battery驱动分析及充电流程
- MTK平台下Battery驱动分析及充电流程
- UNIX系统被删文件的恢复策略
- SqlServer中用SQL语句附加数据库及修改数据库逻辑文件名
- “致命”高跟鞋获2009年“鞋迷”比赛设计奖
- form表单中属性的有效性验证
- wince中解析reg和bib文件的不同之处(转)
- QtEmbedded鼠标驱动流程分析(下)
- 波司登:中国服装行业的骄傲
- 精妙的SQL语句
- require_once() ,include_once() ,require(),include() 转自521Life生活之家:521life.com
- 科目2顺利过关
- css(1)背景图片的属性
- 由森马事件看中国企业的成长
- WinCE BSP的 BIB .bib 文件介绍
- jQuery的Jeditable插件使用web Service回传数据