• qt 键盘 插件


    http://www.cuteqt.com/bbs/viewthread.php?tid=509

    插件实现________________________________
    #ifndef KBLIBPLUGIN_H
    #define KBLIBPLUGIN_H
    #include <QKbdDriverPlugin>
    class kblibPlugin : public QKbdDriverPlugin
    {
        Q_OBJECT
    public:
        kblibPlugin(QObject *parent = 0);
        QWSKeyboardHandler *create(const QString & key, const QString & device);
        QStringList keys () const;
    };
    #endif // KBLIBPLUGIN_H
    ____________________________________________
    #include "kblibplugin.h"
    #include "kblibhandler.h"
    #include <QtDebug>
    kblibPlugin::kblibPlugin(QObject *parent) :
            QKbdDriverPlugin(parent)
    {
        qDebug()<<"plugin created";
    }
    QWSKeyboardHandler *kblibPlugin::create(
            const QString & key, const QString & device)
    {
        qDebug()<<"plugin created";
        if(key.toLower()=="kblibhandler")
            return new kblibHandler(device);
        return 0;
    }
    QStringList kblibPlugin::keys() const
    {
        return QStringList()<<"kblibhandler";
    }
    Q_EXPORT_PLUGIN2(kblibhandler, kblibPlugin)
    ______________________________________________
    handler 的实现___________________________________
    #ifndef KBLIBHANDLER_H
    #define KBLIBHANDLER_H
    #include <QWSKeyboardHandler>
    class QSocketNotifier;
    class kblibHandler:public QObject,public QWSKeyboardHandler
    {
        Q_OBJECT
    public:
        kblibHandler(const QString &device=QString("/dev/buttons"));
        ~kblibHandler();
    private:
        QSocketNotifier *notify;
        int kbFd;
        char buttons[6];
    private slots:
        void readData();
    };
    #endif // KBLIBHANDLER_H
    __________________________________________
    #include "kblibhandler.h"
    #include "fcntl.h"
    #include <QtCore>
    #include <QDebug>
    kblibHandler::kblibHandler(const QString &device)
    {
        qDebug()<<"buttonpressed!";
        kbFd=open(device.toLocal8Bit().constData(),O_RDONLY,0);
        if(kbFd>=0){
            notify=new QSocketNotifier(kbFd,QSocketNotifier::Read,this);
            connect(notify,SIGNAL(activated(int)),this,SLOT(readData()));
        }else{
            qWarning("Cannot open %s for keyboard input",
                     device.toLocal8Bit().constData());
            return;
        }
    }
    kblibHandler::~kblibHandler()
    {
        if(kbFd>=0)
            close(kbFd);
    }
    //SLOT, handle the buttons' change.
    void kblibHandler::readData()
    {
        Qt::KeyboardModifiers modifiers = Qt::NoModifier; //enum of Modifiers
        int currentKey=-1;
        int unicode=0xffff;
        int keyCode=0;
        if(read(kbFd,buttons,sizeof buttons)!=sizeof buttons){
            qWarning("Cannot read buttons");
            return;
        }
        //keyword 'unsigned' eleminated Complier's warning!
        for(unsigned int i=0;i<(sizeof buttons/sizeof buttons[0]);i++){
            if(buttons==1){
                currentKey=i;
                break;
            }
        }
        //if the button released, then return;
        if(currentKey==-1)
            return;
        switch(currentKey){
        case 0:
            keyCode=Qt::Key_Display;
            unicode=0xffff;
            break;
        case 1:
            break;
        case 2:
            break;
        case 3:
            break;
        case 4:
            break;
        case 5:
            break;
        default:
            return;
        }
        //Sends a key event to the Qt for Embedded Linux server application.
        processKeyEvent(unicode,keyCode,modifiers,true,false);
    }
    _______________________________________
    Qt Pro__________________________________
    QT += core \
        gui
    TARGET = kblibhandler
    TEMPLATE = lib
    CONFIG += plugin
    #DESTDIR = $$[QT_INSTALL_PLUGINS]/kbddrivers
    SOURCES += kblibplugin.cpp \
        kblibhandler.cpp
    HEADERS += kblibplugin.h \
        kblibhandler.h
    ______________________________________
    QWS变量设置成:QWS_KEYBOARD=kblibhandler:/dev/buttons,插件我也放到正确的plugins目录:plugins/kbddrivers/,可是就无法load出来,插件我是按照这个来做的http://qt.nokia.com/doc/qtopia4.3/tut-deviceexample.html

    运行程序之前 export QT_DEBUG_PLUGINS=1
    可以看到插件载入过程中的错误。

  • 相关阅读:
    提供思路的一些视角,两种方法。
    试错?捷径?
    AntV G2 toolTip 自定义显示 One'_
    Vue 鼠标滚轮控制左右滑动 One'_
    Ant Design of Vue table表格 点击一行选中效果 One'_
    记录百度地图marker中label现隐 One'_
    inputplaceholder css样式 One'_
    VUE + Springboot + SM4前端加密 后端解密 One'_
    复选框样式复写 One'_
    echarts 3D地图 One'_
  • 原文地址:https://www.cnblogs.com/cute/p/2145971.html
Copyright © 2020-2023  润新知