zoukankan      html  css  js  c++  java
  • 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报告鼠标信息。

  • 相关阅读:
    Spring MVC Ajax 嵌套表单数据的提交
    Spring MVC 过滤静态资源访问
    Spring MVC 页面跳转时传递参数
    IDEA Maven 三层架构 2、运行 springMVC
    IDEA Maven 三层架构 1、基本的Archetype 搭建
    EasyUI DataGrid 基于 Ajax 自定义取值(loadData)
    Spring MVC Ajax 复杂参数的批量传递
    Mybatis Sql片段的应用
    在 Tomcat 8 部署多端口项目
    自动升级的设计思路与实现
  • 原文地址:https://www.cnblogs.com/baizx/p/1707784.html
Copyright © 2011-2022 走看看