QtEmbedded中如何实现自己的keyboard.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:6 大小:24KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

QtEmbedded中如何实现自己的keyboard.doc

QtEmbedded中如何实现自己的keyboard.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

QtEmbedded中如何实现自己的keyboard最近的项目是基于Qt,既然是嵌入式设备,难免就要在根据自己的平台来实现键盘的驱动部分,当然是属于Qt一层,而不是更底层的字符设备驱动。这里要讲的方法是在不重新编译Qt库的情况,把我们自己的键盘驱动作为一个Qt插件集成到我们的程序中。当然也可以把我们自己的键盘驱动部分直接编译到Qt库里面。Qt中提供的插件机制(Plugin),可以使得我们很容易根据自己的硬件实现自己的键盘代码。具体步骤:1.首先创建一个静态插件库(当然也可以是动态库),我们这边库名叫做optkeypad。a.创建一个键盘处理类KeypadHandler,多继承于QObject和QWSKeyboardHandler,实现一个关键的函数readKpdData(),这个函数很关键,就是用来把我们的硬件值(hardcode)转换为Qt库中定义的键值。b.创建一个插件类KeypadDriverPlugin,继承于QKbdDriverPlugin,这个类主要是创建一个我们自己的键盘处理类KeypadHandler,重新实现QKbdDriverPlugin的create()和keys()函数,这是两个虚函数,我们要在自己的类中重新实现这两个函数。c.我们做成一个静态插件类,HYPERLINK"http://xn--onqs58b.pro/"所以.pro文件如下。2.那么如何使用这个插件类呢,a.在我们的应用程序中(一般在main.cpp中)添加宏Q_IMPORT_PLUGIN(optkeypad)。optkeypad是库名,注意不包含linux中的前缀lib和扩展名.a。b.HYPERLINK"http://xn--3ds25ooa432u0rb08i.pro/"在应用程序的.pro文件中添加QTPLUGIN+=optkeypad,并且要在链接中添加这个库LIBS+=-L(路径)-loptkeypadc.接下来要为程序添加环境变量QWS_KEYBOARD,exportQWS_KEYBOARD=OptimusKpdHandler:/dev/input/event1(这个很重要)注意这个OptimusKpdHandler是怎么来的,我们的插件类KeypadDriverPlugin要根据这个名字来建立一个键盘处理类KeypadHandler,所以如果这个名字不匹配的话,处理类是不会被创建的。3.接下来我们的Qt应用程序中的键值,就是KeypadHandler类的readKpdData()处理后的值。.pro文件TEMPLATE=libCONFIG+=static\plugin\releaseTARGET=optkeypadHEADERS+=keypadhandler.h\keypaddriverplugin.hSOURCES+=keypadhandler.cpp\keypaddriverplugin.cppQMAKE_INCDIR+=../ClockCommonQMAKE_LIBS+=-lClockCommonkeypadDriverPlugin.h文件classKeypadDriverPlugin:publicQKbdDriverPlugin{Q_OBJECTpublic:KeypadDriverPlugin(QObject*parent=0);~KeypadDriverPlugin();QWSKeyboardHandler*create(constQString&driver,constQString&device);QWSKeyboardHandler*create(constQString&driver);QStringListkeys()const;};类的实现文件KeypadDriverPlugin::KeypadDriverPlugin(QObject*parent){}KeypadDriverPlugin::~KeypadDriverPlugin(){}QStringListKeypadDriverPlugin::keys()const{returnQStringList()<<"OptimusKpdHandler";}////Thecreate()functionsareresponsibleforreturninganinstanceof//thekeypaddriver.Wedothisonlyifthedriverparametermatchesourkey.//QWSKeyboardHandler*KeypadDriverPlugin::create(constQString&driver,constQString&device){PR("KeypadDriverPlug