Qt 触摸屏校准程序

本文详细介绍了基于Qt的触摸屏校准程序的实现原理。通过QWSPointerCalibrationData和QWSCalibratedMouseHandler类,利用Qt库将触摸屏模拟为鼠标设备进行校准。校准过程涉及坐标映射算法,确保触摸屏输入与屏幕位置一致。此外,还展示了如何读取和保存校准数据,并在系统接收到特定消息时关闭校准程序。
摘要由CSDN通过智能技术生成

Qt 下触摸屏的驱动
   Qt/Embedded 中与用户输入事件相关的信号,是 建立在对底层输入设备的接口调用之上的,一般通过 对设备文件的  I/O 读写来实现。大部分这样的驱动程序已经被封装进 Qt 库当中,形成了相应的设备驱动接口,如显示卡驱动、鼠标、键盘、串口和并口等。 其中鼠标设备的抽象基类为 QWSMouse Handler,从 该类又重新派生出一些具体的鼠标类设备的实现类。在 3.3.4 版本系列的 Qt/Embedded 中,鼠标类设备的派生结构如图 3 所示。

图 3 鼠标类设备的派生结构图(灰色线框表示可省略类结构)
   鼠标类设备的加载方式与 KeyBoard 设备加载方 式是类似的,在系统构造 QWSServer 对象时,调用成 员函数  QWSServer:: openMouse,程序在QWSServer:: openMouse 函数中再调用QmouseDriverFactory::create () 或QmouseDriverPlugin:: create ()。该函数根据 Linux 系统的环境变量QWS_MOUSE_PROTO获得鼠标类设备的设备类型和设备节点。打开并返回相应设备的基类指针 QWSMouseHandler 给系统,系统通过操作该基类派生出的具体子类设备指针QWSCustomMouseHandler,获得对具体鼠标类设备的调用操作(见图 4)。
  
图 4 软件流程图
   触摸屏和鼠标类设备在功能上基本是一致的,因 此,在 Qt 库中一般把触摸屏模拟成鼠标设备来实现 对触摸屏设备的操作。

基于Qt的触摸屏校准程序

/****************************************************************************
****************************************************************************/

#ifndef CALIBRATION_H
#define CALIBRATION_H

#include <QDialog>
#include <QWSPointerCalibrationData>

//! [0]
class Calibration : public QDialog
{
//    Q_OBJECT
public:
    Calibration();
    ~Calibration();
    int exec();
    void init();
    void calibration_quit();
protected:
    void paintEvent(QPaintEvent*);
    void mouseReleaseEvent(QMouseEvent*);
    void accept();

private:
    QWSPointerCalibrationData data;
    int pressCount;
    QWSPointerCalibrationData data_read;
};
//! [0]


#endif

/****************************************************************************
****************************************************************************/

#include "calibration.h"

#include <QWSPointerCalibrationData>
#include <QPainter>
#include <QFile>
#include <QTimer>
#include <QApplication>
#include <QDesktopWidget>
#include <QMouseEvent>
#include <QScreen>
#include <QWSServer>
#include <QDebug>
#include <QMessageBox>
#include <QWSCalibratedMouseHandler>
#include <QtGui>
#include "Qtglobal.h"
//! [0]
static QWSPointerCalibrationData initial_data;
static bool flag=false;
Calibration::Calibration()
{

}
//! [2]

void Calibration::init()   //触摸屏的坐标信息等初始化, 使鼠标焦点校准窗口上,
 {
    this->setCursor(QCursor(Qt::BlankCursor));
    QRect desktop = QApplication::desktop()->geometry();
    desktop.moveTo(QPoint(0, 0));
    setGeometry(desktop);

    setFocusPolicy(Qt::StrongFocus);
    setFocus();
    setModal(true);
//! [0]

//! [1]
    int width = qt_screen->deviceWidth();
    int height = qt_screen->deviceHeight();

    int dx = width / 10;
    int dy = height / 10;

    QPoint *points = data.screenPoints;
    points[QWSPointerCalibrationData::TopLeft] = QPoint(dx, dy);
    points[QWSPointerCalibrationData::BottomLeft] = QPoint(dx, height - dy);
    points[QWSPointerCalibrationData::BottomRight] = QPoint(width - dx, height - dy);
    points[QWSPointerCalibrationData::TopRight] = QPoint(width - dx, dy);
    points[QWSPointerCalibrationData::Center] = QPoint(width / 2, height / 2);


//! [1]

//! [2]
    pressCount = 0;   //屏幕校准点计数
}

//! [3]
Calibration::~Calibration()
{
}
//! [3]

//! [4]
int Calibration::

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值