• Qt/e中鼠标设备分析


    鼠标设备在Qt中表现为QWSMouseHandler的实例,QWSMouseHandler是一个虚基类,不能直接实例化,需要根据设备不同,重新实现其相应的虚函数。然后注册到QMouseDriverFactory,这样Qt在系统初始化载入相应的驱动,对鼠标设备进行管理。

    Qt中鼠标驱动分为预置和插件两种。其中预置的是Qt为常见的鼠标设备提供了默认的驱动,比如标准的Pc Mouse,为开发程序而提供的qvfbmouse,以及支持触摸屏的tslib鼠标等,Qt预置支持的所有鼠标设备可以见下图,是通过Eclipse工具得到的,通过名字我们可以判断出大多数对应的鼠标设备,详细情况可以参考Qt的官方帮助文档。由于eclipse没有配置好,因此显示有点问题,每个class都是显示了两遍。

    clip_image002

    如果要使用这些设备就直接设置环境变量QWS_MOUSE_PROTO既可以。如果是Qt预置不支持的鼠标设备,那么可以通过Qt的插件系统加入到Qt中,同样设置QWS_MOUSE_PROTO环境变量即可。QWS_MOUSE_PROTO环境变量的设置可以通过如下方法:

    export QWS_MOUSE_PROTO="tslib:/dev/ts"

    其中参数是以:分割,第一个参数tslib指明要使用哪一个鼠标驱动,第二个参数指明了驱动对应的鼠标设备名字。

    QWSMouseHandler的声明如下:

    class Q_GUI_EXPORT QWSMouseHandler
    {
    public:
        explicit QWSMouseHandler(const QString &driver = QString(),
                                 const QString &device = QString());
        virtual ~QWSMouseHandler();

        virtual void clearCalibration() {}
        virtual void calibrate(const QWSPointerCalibrationData *) {}
        virtual void getCalibration(QWSPointerCalibrationData *) const {}

        virtual void resume() = 0;
        virtual void suspend() = 0;

        void limitToScreen(QPoint &pt);
        virtual void mouseChanged(const QPoint& pos, int bstate, int wheel = 0);
        const QPoint &pos() const { return mousePos; }

        void setScreen(const QScreen *screen);

    protected:
        QPoint &mousePos;
        QWSMouseHandlerPrivate *d_ptr;
    };

    所有的鼠标设备必须实现的接口,它实际上就是一个Qt与操作系统真正的设备之间通信的中间层。用户自定义的鼠标设备只需要继承QWSMouseHandler,并且实现其中的两个虚函数resume和suspend即可,如果是触摸屏设备则需要重新实现clearCalibration,calibrate,getCalibration三个虚函数,尤其要注意的是从操作系统的鼠标设备获取到的鼠标信息可以通过mouseChanged函数报告给Qt系统。也就是说实现类最关键的是周期性的调用mousechanged来向Qt报告鼠标信息。

  • 相关阅读:
    RabbitMQ:六、网络分区
    RabbitMQ:五、高阶
    RabbitMQ:四、跨越集群
    数据结构:红黑树
    RabbitMQ:三、进阶
    面对对象多态的异常
    面向对象三大特征---多态
    面对对象继承的优点和缺点
    面对对象当中的代码块
    面对对象this关键字
  • 原文地址:https://www.cnblogs.com/baizx/p/1707784.html
Copyright © 2020-2023  润新知