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了,诸神保佑啊。
转载记得注明出处啊。感谢啦。毕竟是自己的一点学习心得,供大家借鉴。不足之处,慢慢纠正。
大多数编写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了,诸神保佑啊。
转载记得注明出处啊。感谢啦。毕竟是自己的一点学习心得,供大家借鉴。不足之处,慢慢纠正。
相关文章推荐
- Qt按键插件、触摸屏插件不起作用的解决办法及自定义插件编译
- JSP 2.x中另一种自定义标签编写方法
- 一个顽疾——QT不能包含tslib的头和库文件联合编译的解决方法
- 最新版CKEditor的配置方法及插件(Plugin)编写示例
- 可供VC调用的QT编写的界面DLL方法
- Qt编写自定义插件
- Qt交叉编译时,提示找不到tslib库的可能解决方法
- 自定义的Qt程序打印调试信息的方法
- Qt4.5.1触摸屏(tslib 1.4)+sqlite3 移植全记录
- qt 中自定义信号类型方法
- 发布Qt Widgets桌面应用程序的方法(自定义进程步骤,用QT Creator直接生成)
- Qt之模型/视图(自定义按钮)(使用QStyleOption的子类进行drawControl,和我用的方法完全不一样)
- qt编写的android程序在android系统中运行,中文显示乱码的解决方法
- Qt5.3.0的移植安装与测试(交叉编译,用于arm,支持tslib触摸屏)
- 使用Qt编写服务器端程序(包括Http传输服务器端)的方法
- Mvc视图编写自定义辅助方法:
- mybatis-generator-maven-plugin 插件扩展 增加自定义方法
- 可供VC调用的QT编写的界面DLL方法
- QT5.7+tslib1.4库的交叉编译、移植到开发板ARM9上,无法使用触摸屏
- Qt之自定义托盘(两种方法)