经过一天的推敲代码,终于找到了些眉目。网上好多都是以qt plug的方式添加自定义驱动。此方法在下测试过,但不能和USB键盘同时使用,不知道方法不对还是在下功力太浅。
好了,开始介绍同时使用的方法。
第一、参照原有文件编写自己的类。
1、参照src/gui/embedded/下面的qkbdusb_qws.cpp和qkbdusb_qws.h,复制成自己的类的定义和实现,取名为qkbdbutton_qws.h 和qkbdbutton_qws.cpp。
2、把qkbdbutton_qws.h里的类名改成自己的类名(自己取)。
3、把qkbdbutton_qws.cpp里的类名改成自己的类名。
4、定义结构体,替换usb的结构体。
struct InputData
{
unsigned int dummy1;
unsigned int dummy2;
unsigned short type;
unsigned short code;
unsigned int value;
unsigned int dummy3;
unsigned int dummy4;
unsigned int dummy5;
unsigned int dummy6;
};
5、修改readKeyboardData()函数。
void QWSHomeButtonPrivate::readKeyboardData()
{
InputData event;
int n = read(fd, &event, sizeof(InputData));
Qt::KeyboardModifiers modifiers = Qt::NoModifier;
int unicode = 0xffff;
int key_code = 0;
// 可以根据自己特定的硬件值来设定。
switch (event.code)
{
case 7: key_code=Qt::Key_Up;break; //
case 4: key_code=Qt::Key_Down;break; //
case 3: key_code=Qt::Key_Left;break; //
case 5: key_code=Qt::Key_Right;break; //
case 6: key_code=Qt::Key_Enter;break; // Enter
case 8: key_code=Qt::Key_Escape;break; // Enter
default: break;
}
handler->processKeyEvent(unicode, key_code, modifiers, event.value != 0, false);
}
好了,五分之一的工作完成了。哈哈,你说是不是太简单了,我笑而不语,因为下面的工作更加的简单。
二、把自己的类加添到QWSUsbKeyboardHandler(device)中,让它运转起来。
1、在src/gui/embedded/qkbddriverfactory_qws.cpp文件,在头定义文件中,把自己刚才的文件qkbdbutton_qws.h添加进来。
#include "qkbdbutton_qws.h"
2、在create()函数中找到USB的定义(在编译qt时,开启USB键盘的选项)。
按照USB的写法添加自己的定义。如下
# ifndef QT_NO_QWS_KBD_USB
if (driver == QLatin1String("usb"))
return new QWSUsbKeyboardHandler(device);
//***************modify start.
if (driver == QLatin1String("mybutton"))//不要试图改成大写,因为上面有猫腻。
return new QWSHomeHandler(device);
//***************modify end.
# endif
3、在keys()函数中找到USB定义添加自己的类名到QStringList中。
#ifndef QT_NO_QWS_KBD_USB
list << QLatin1String("USB");
//*********************modify start。
list << QLatin1String("BUTTON");
//*********************modify end。
#endif
又搞定了,马拉松到了五之二处了,好高兴啊。
三、让你的qte能读取到你的按键类。
1、在src/gui/embedded/qwindowsystem_qws.cpp中,修改函数openKeyboard()。添加:
QWSKeyboardHandler *handler = QKbdDriverFactory::create(type, device);
setKeyboardHandler(handler);
//***********************modify start.
QWSKeyboardHandler *handler1 = QKbdDriverFactory::create("button", device);
setKeyboardHandler(handler1);
//***********************modify end.
搞定,这步好简单。
四、修改pri文件,让你的类编译到qte库中。
1、打开文件src/gui/embedded/embedded.pri
在最后添加自己的文件。
# ***********************modify start.
HEADERS += embedded/qkbdbutton_qws.h
SOURCES += embedded/qkbdbutton_qws.cpp
# ***********************modify end.
搞定了这步,同志们,开始编译你的qte吧。
五、export 自己的按键和USB,搞定,这回真正的大功告成了。
经过测试,完美运行。