天天看點

Qt/e中滑鼠裝置分析

滑鼠裝置在Qt中表現為

QWSMouseHandler

的執行個體,QWSMouseHandler是一個虛基類,不能直接執行個體化,需要根據裝置不同,重新實作其相應的虛函數。然後注冊到QMouseDriverFactory,這樣Qt在系統初始化載入相應的驅動,對滑鼠裝置進行管理。

Qt中滑鼠驅動分為預置和插件兩種。其中預置的是Qt為常見的滑鼠裝置提供了預設的驅動,比如标準的Pc Mouse,為開發程式而提供的qvfbmouse,以及支援觸摸屏的tslib滑鼠等,Qt預置支援的所有滑鼠裝置可以見下圖,是通過Eclipse工具得到的,通過名字我們可以判斷出大多數對應的滑鼠裝置,詳細情況可以參考Qt的官方幫助文檔。由于eclipse沒有配置好,是以顯示有點問題,每個class都是顯示了兩遍。

Qt/e中滑鼠裝置分析

如果要使用這些裝置就直接設定環境變量

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報告滑鼠資訊。

繼續閱讀