Qt编写自定义触摸屏Plugin的方法(非TSlib)

这篇文章主要介绍编写方法,非提供触摸屏的输入处理过程。

 大多数编写Plugin 的方法无非如下:

一 编写插件

编写一个Qt的插件需要以下步骤 

1.声明一个插件类,

2.定义一个类,实现这个插件类定义的接口,定义的这个类必须从QObject集成下来。

3.使用Q_INTERFACESQ_INTERFACES()告知Qt的元系统这个接口的存在

3.使用宏Q_EXPORT_PLUGIN2()来导出插件的接口

4.编写插件类的.pro文件

pro工程文件的编写

TEMPLATE   = lib

CONFIG    += plugin

HEADERS    = custommousedriver.h \

         customMouseDriverPlugin.h

SOURCES    = custommousedriver.cpp \

          customMouseDriverPlugin.cpp

TARGET     = customMouseDriverPlugin 

其中,值得注意的是:

环境变量

export  QT_PLUGIN_PATH=/qt/lib/plugins

exportQWS_MOUSE_PROTO=customMouseDriverPlugin :/dev/input/TouchScreen

export QT_DEBUG_PLUGINS=1(这个是为了让QT加载Plugin时,输出调试信息,让我们明确到底是哪里出了问题。真的非常有用,不信,你就慢慢纠结吧O(∩_∩)O~)

Q_EXPORT_PLUGIN2宏让Qt知道该类是一个插件。如:

Q_EXPORT_PLUGIN2(customMouseDriverPlugin , CCustomMouseDriverPlugin);

第一个参数是插件的名字;这个基本名要和.pro指定的TARGET项保持一致,并且和环境变量QWS_MOUSE_PROTO中的driver内容一致(也就是customMouseDriverPlugin :/dev/input/tsdev);对了,也要跟你实现的keys()函数返回的字符串一致哦(反正一样总没错,减少出错率)。第二个参数是插件的类名。我们使用宏Q_EXPORT_PLUGIN2,输出插件,让插件变得可以被QT使用。


大部分过程是类似的,这里主要讲下我们让QT加载自己编写的Plugin库时遇到的问题。

我们常常遇到自己编写完库,然后根据QT帮助文档中的提示将它放到QT对应的Plugins的mousedrivers下,然后运行我们的测试程序,但是一直没办法跑到我们在内部做的调试信息里。所以不得不怀疑到底是我们的程序有问题,还是放置的目录错误了?

这里我们可以看下输出的调试信息。我遇到的问题调试信息如下:

QFactoryLoader::QFactoryLoader() looking at "/phone/lib/plugins/mousedrivers/libcustomMouseDriverPlugin .so" 
"Cannot load library /phone/lib/plugins/mousedrivers/libcustomMouseDriverPlugin .so: (/phone/lib/plugins/mousedrivers/libcustomMouseDriverPlugin .so: undefined symbol: _ZQL33MouseInputHandlerPrivate)" 
           could not load 。


我就大大的不爽了,编译都正常,怎么可能会在加载时提示没定义呢。我勒个去啊,幸亏我查看了其他输入设备的QT源代码(其实我的驱动代码差不多跟源码类似啦,只是输入部分自己处理了下。),比对了良久(真心有点久啊),终于发现原来要在自定义文件custommousedriver.cpp 尾部增加,#include “xxx_moc.h”  xxx可以自定义,然后用对应编译器qmake生成下,会自动生成你包含的那个xxx_moc.h的。具体原理,没去深究,有探索精神的同学可以研究下,再来分享哦,然后make,再来一次加载,OK了,诸神保佑啊。

转载记得注明出处啊。感谢啦。毕竟是自己的一点学习心得,供大家借鉴。不足之处,慢慢纠正。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值