Qt/e中鼠标设备分析

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

鼠标设备在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报告鼠标信息。

目录
相关文章
|
1月前
|
存储 机器学习/深度学习 人工智能
Qt魔法书:打造自定义鼠标键盘脚本(二)
Qt魔法书:打造自定义鼠标键盘脚本
35 0
|
5月前
|
存储 Cloud Native Linux
Qt 关于mouseTracking鼠标追踪和tabletTracking平板追踪的几点官方说明
Qt 关于mouseTracking鼠标追踪和tabletTracking平板追踪的几点官方说明
|
7月前
|
算法 C++
|
8月前
QT+OpenGL鼠标操作和模型控制
光线追踪法 从鼠标投射 3D 射线, 通过摄像机,进入场景,然后检查该光线是否与某个对象相交。
117 0
|
计算机视觉
Qt实用技巧:实现不规则窗口的鼠标消息穿透,包括穿透到桌面和穿透到父窗口
Qt实用技巧:实现不规则窗口的鼠标消息穿透,包括穿透到桌面和穿透到父窗口
Qt实用技巧:实现不规则窗口的鼠标消息穿透,包括穿透到桌面和穿透到父窗口
|
1月前
|
开发框架 Linux API
Qt魔法书:打造自定义鼠标键盘脚本(一)
Qt魔法书:打造自定义鼠标键盘脚本
23 0
|
3月前
|
C++
QT 重写控件(QPushButton为例)实现背景图片的切换和鼠标样式切换
一般在QT开发中,使用setCursor()给控件设置鼠标的样式效果(一般是手型和箭头的切换),一般情况下,这个函数也是起作用的,但是一旦调用了全局QApplication::setOverrideCursor()设置鼠标效果后,在使用setCursor给控件设置鼠标样式就不起效果了,这是QT的机制
75 0
|
3月前
Qt鼠标悬浮在图片上显示删除字样
Qt鼠标悬浮在图片上显示删除字样
|
4月前
[Qt5] 鼠标响应事件和计时器事件
[Qt5] 鼠标响应事件和计时器事件
26 0
|
4月前
[Qt5] 鼠标中心为基准缩放图像(halcon实现)
[Qt5] 鼠标中心为基准缩放图像(halcon实现)
62 0

热门文章

最新文章

推荐镜像

更多