Qte4 下添加自定义按键驱动和USB同时使用

来源:互联网 发布:淘宝联盟 京东 编辑:程序博客网 时间:2024/05/16 01:53

      经过一天的推敲代码,终于找到了些眉目。网上好多都是以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,搞定,这回真正的大功告成了。

 

经过测试,完美运行。

原创粉丝点击