Qt4.8.6 arm 平台 

根据qt-everywhere-opensource-src-4.8.6/examples/qws/mousecalibration 示例修改

calibration.h

#ifndef CALIBRATION_H
#define CALIBRATION_H#include <QDialog>
#include <QWSPointerCalibrationData>//! [0]
class Calibration : public QDialog
{
public:Calibration();~Calibration();int exec();protected:void paintEvent(QPaintEvent*);void mouseReleaseEvent(QMouseEvent*);void accept();private:QWSPointerCalibrationData data;int pressCount;
};
//! [0]#endif

calibration.cpp

#include "calibration.h"
#include <QDebug>
#include <QLabel>#include <QWSPointerCalibrationData>
#include <QPainter>
#include <QFile>
#include <QTimer>
#include <QApplication>
#include <QDesktopWidget>
#include <QMouseEvent>
#include <QScreen>
#include <QWSServer>Calibration::Calibration()
{QRect desktop = QApplication::desktop()->geometry();desktop.moveTo(QPoint(0, 0));setGeometry(desktop);setFocusPolicy(Qt::StrongFocus);setFocus();setModal(true);int width = qt_screen->deviceWidth();int height = qt_screen->deviceHeight();int dlx = width/2;int dly = height/2;QLabel *label = new QLabel(this);label->setText("请点击十字叉校准触摸屏");QFont ft;ft.setPointSize(30);label->setFont(ft);QPalette pe;pe.setColor(QPalette::WindowText, Qt::white);label->setPalette(pe);label->adjustSize();label->size().width();label->move((width - label->size().width())/2, (height / 4));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);pressCount = 0;
}Calibration::~Calibration()
{
}int Calibration::exec()
{QWSServer::mouseHandler()->clearCalibration();grabMouse();activateWindow();int ret = QDialog::exec();releaseMouse();return ret;
}void Calibration::paintEvent(QPaintEvent*)
{//画十字+QPainter p(this);p.fillRect(rect(), Qt::black);QPoint point = data.screenPoints[pressCount];// Map to logical coordinates in case the screen is transformedQSize screenSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());point = qt_screen->mapFromDevice(point, screenSize);#if 0//十字  横线p.fillRect(point.x() - 6, point.y() - 1, 13, 3, Qt::red);//十字  竖线p.fillRect(point.x() - 1, point.y() - 6, 3, 13, Qt::red);
#else//设置pWigth 和 pPreWigth调节 十字叉大小 , pWigth 必须比 pPreWigth大//pPreWigth 十字外部直角边长度//pWigth (十字宽度-1)/2int pPreWigth = 5;int pWigth = 21;p.fillRect(point.x() - (pWigth-1), point.y() - (pWigth-1), pPreWigth, 1, Qt::white);p.fillRect(point.x() + (pWigth-pPreWigth) , point.y() - (pWigth-1), pPreWigth, 1, Qt::white);p.fillRect(point.x() - pWigth, point.y() - 1, pWigth*2+1, 3, Qt::white);p.fillRect(point.x() - (pWigth-1), point.y() + (pWigth-1), pPreWigth, 1, Qt::white);p.fillRect(point.x() + (pWigth-pPreWigth) , point.y() + (pWigth-1), pPreWigth, 1, Qt::white);p.fillRect(point.x() - (pWigth-1), point.y() - (pWigth-1), 1, pPreWigth, Qt::white);p.fillRect(point.x() - (pWigth-1), point.y() + (pWigth-pPreWigth), 1, pPreWigth, Qt::white);p.fillRect(point.x() - 1,  point.y() - pWigth, 3, pWigth*2+1, Qt::white);p.fillRect(point.x() + (pWigth-1), point.y() - (pWigth-1), 1, pPreWigth, Qt::white);p.fillRect(point.x() + (pWigth-1), point.y() + (pWigth-pPreWigth), 1, pPreWigth, Qt::white);
#endif}void Calibration::mouseReleaseEvent(QMouseEvent *event)
{// Map from device coordinates in case the screen is transformedQSize screenSize(qt_screen->width(), qt_screen->height());QPoint p = qt_screen->mapToDevice(event->pos(), screenSize);data.devPoints[pressCount] = p;if (++pressCount < 5)repaint();elseaccept();
}void Calibration::accept()
{Q_ASSERT(pressCount == 5);QWSServer::mouseHandler()->calibrate(&data);QDialog::accept();
}

调用方法:

void  execCalibration()
{qDebug()<<"Calibration start ...";Calibration cal;cal.exec();qDebug()<<"Calibration end ...";//数据保存到qt_pointercal中QMessageBox::StandardButton rb = QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);if(rb == QMessageBox::Yes){qDebug()<<"save to pointeral";QFile rfile("/opt/qt_pointercal");if(rfile.open(QIODevice::ReadOnly)){QString data;char buff[512];rfile.readLine(buff, 512);data=buff;qDebug()<<data;QFile wfile("/opt/pointercal");wfile.open(QIODevice::WriteOnly);wfile.write(data.toLatin1(), data.length());wfile.close();rfile.close();}}
}

注意:qt程序启动时根据tslib的环境变量TSLIB_CALIBFILE 指定的文件加载校准文件,

而上面实现的qt会保存校准数据到POINTERCAL_FILE指定的文件中,校验完以后要把

POINTERCAL_FILE指定的文件内容拷贝到TSLIB_CALIBFILE 中

POINTERCAL_FILE=/opt/qt_pointercalTSLIB_CALIBFILE=/opt/pointercal

Qt实现触摸屏校准界面相关推荐

  1. linux蜂鸣器控制实验,【Linux公开课】蜂鸣器使用、LCD背光控制、触摸屏校准、GPIO操作...

    摘要为方便使用蜂鸣器,系统为蜂鸣器提供类似LED的操作接口,对应的操作文件是/sys/class/leds/beep/brightness.写入1使蜂鸣器鸣叫,写入0停止鸣叫- 8.12 蜂鸣器使用 ...

  2. 定制WinCE系统的屏幕校准界面

    作者:xiaolei05 转自:http://blog.csdn.net/xiaolei05/article/details/6582203 在实际应用中,经常需要定制WinCE系统的屏幕校准界面.最 ...

  3. 更改触摸屏校准程序界面提示文字

    BSP中提供的触摸屏校准程序在个别设备上用起来可能不太适合,比如说我们的设备屏幕宽度只有 240pixels,会有部分字符超出屏幕外侧,原以为这是BSP的提供的程序,无源码没办法修改,这两天才知道原来 ...

  4. linux内核关闭触摸屏校准,linux内核usb触摸屏驱动bug调试- selected device is not a touchscreen I understand...

    近期给客户调试一块数控板,今天客户带过来一个屏,并且有一个usb的触摸屏芯片接在屏上.屏很快就弄好正常显示. 触摸屏在内核下找到usb 触摸屏驱动,内核启动后这个usb转的触摸屏也正常找到,注册为ev ...

  5. QT设计器主界面中文介绍

    在Qt程序开发过程中,除可以通过手动写代码实现软件开发功能外,还可以通过Qt的GUI界面设计器(Qt Designer)进行界面的绘制和布局.该工具提供了Qt的基本可绘制窗口部件,如QWidget.Q ...

  6. QT:触摸屏支持手指触摸,增加touch事件touchevent,记录前后touch坐标并处理

    QT:触摸屏支持手指触摸,增加touch事件touchevent,记录前后touch坐标并处理 1.手指触摸事件当做鼠标事件去响应的可行性 2.触摸事件touchEvent的添加 3.重写touch事 ...

  7. QT人机交互(动态界面)

    QT简单的人机交互界面设计 人机交互-----用户能够与界面进行动态交互 信号和槽:当一个事件发生时,那么一个对应的信号会触发,如果与该信号已建立的连接的槽函数它就会被自动调用.自定义信号并建立连接, ...

  8. QT Desinger设计程序主界面 PyUIC生成.py

    我们在PyCharm安装配置Qt Designer+PyUIC教程中已配置好了PyCharm+QTDesigner+PyUIC环境 这里在此基上我们演示如何使用这些工具,编写一个图形界面程序: 程序主 ...

  9. QT实现滑动切换界面,ARM/Linux触屏滑动切换界面,切换Qwidget

    QT实现滑动切换界面,触屏滑动切换界面 实现思想 实现过程 完整代码 实现思想 项目中要用到ARM,要求手势滑动能够切屏,首先我们想到使用 QGestureEvent,但使用起来比较麻烦,并且个人了解 ...

  10. Qt模仿QQ聊天窗口界面(一)

    Qt模仿QQ聊天窗口界面(一) Qt模仿QQ聊天窗口界面(一) 简述 效果图 QQ的聊天窗口 我做的效果图 代码篇 结尾 简述 最近利用业余时间,模仿QQ做了一个聊天窗口界面,功能还不全,准备分几个部 ...

最新文章

  1. 为什么要有 AtomicReference ?
  2. 《Google软件测试之道》- Google软件测试介绍
  3. 以 Kubernetes 为代表的容器技术,已成为云计算的新界面
  4. [CareerCup] 14.4 Templates Java模板
  5. CodeForces - 1486B Eastern Exhibition(二维中位数)
  6. ubuntu 网络知识总结
  7. c语言安卓图形库cairo,cairo 图形库
  8. [Redux/Mobx] Redux怎样重置状态?
  9. java中字符 的含义 有什么作用_Java中字符串常见题之String相关讲解
  10. UOS 安装nvidia官方显卡驱动
  11. 3.3Packet Tracer - 实施基本连接
  12. Win10 安装美能达打印机驱动程序失败, 怎么也安装不了
  13. mysql 官网 update_UPDATE
  14. python爬虫获取图片无法打开或已损坏_Python爬取小姐姐图片
  15. 来说说datatype
  16. 12306订票候补是个坑_12306的候补购票功能是好还是坏?
  17. 小米范工具系列之五:小米范WEB口令扫描器
  18. Python 3 字符串 strip( ) 方法
  19. 移动应用中字体库的设计与实现
  20. 2018国赛数学建模笔记

热门文章

  1. 苏州新导智能养老:老人智能药箱+养老院人员定位
  2. 如何在Windows命令行窗口复制和粘贴?
  3. SQLServer2008R2精简版使用
  4. 6步解决win7局域网内传输慢的问题
  5. HTML5实习手机端浏览器拍照和本地上传
  6. C#一种简单处理假死的方法
  7. 从内存池到连接池 老码农眼中的资源池
  8. 4月27日—5月1日三年级课程
  9. unity tier setting
  10. 高等数学(下)思维导图