您的位置:首页 > 编程语言 > Qt开发

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

2013-07-19 20:40 141 查看
这篇文章主要介绍编写方法,非提供触摸屏的输入处理过程。

大多数编写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了,诸神保佑啊。

转载记得注明出处啊。感谢啦。毕竟是自己的一点学习心得,供大家借鉴。不足之处,慢慢纠正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: