当前位置: 首页 > news >正文

Windows Pad平板对 Qt 的支持

        Qt 对 Windows 平板(包括二合一设备)的支持非常出色且成熟。这主要得益于 Qt 强大的跨平台抽象能力和对 Windows 原生触控 API 的深度集成。

1. 核心支持:Qt 输入事件模型

Qt 将所有用户交互(鼠标、触摸、手写笔、手势)都统一封装成了 QInputEvent 及其子类。这使得开发者可以用一套逻辑处理多种输入方式,极大地简化了开发。

a) 点击与触摸 (Touch Events)
  • 支持级别原生支持

  • 事件类型

    • QTouchEvent: 封装了多点触控信息。每个触点都是一个 QTouchEvent::TouchPoint,包含了位置、压力、面积等信息。

    • QMouseEvent: 为了向后兼容,默认情况下,Windows 上的触摸操作也会被模拟成鼠标事件。比如,手指按下会生成 QEvent::MouseButtonPress

  • 如何处理

    • 方法一(推荐):启用原生触摸事件。在你的窗口或部件上设置以下属性,这样 Qt 就会产生原生的 QTouchEvent 而不是模拟鼠标事件。

      cpp

      yourWidget->setAttribute(Qt::WA_AcceptTouchEvents);

      然后重写 bool event(QEvent *event) 函数来处理 QEvent::TouchBeginQEvent::TouchUpdateQEvent::TouchEnd

    • 方法二:使用手势 API(见下文)。

    • 方法三:依赖模拟的鼠标事件。对于简单的点击操作,这已经足够了,但你无法获得多点触控的优势。

基础触摸配置
#include <QApplication>
#include <QWidget>class TouchWidget : public QWidget
{
protected:bool event(QEvent *event) override{switch (event->type()) {case QEvent::TouchBegin:qDebug() << "Touch Begin";return true;case QEvent::TouchUpdate:qDebug() << "Touch Update";return true;case QEvent::TouchEnd:qDebug() << "Touch End";return true;case QEvent::TouchCancel:qDebug() << "Touch Cancel";return true;case QEvent::Gesture:return gestureEvent(static_cast<QGestureEvent*>(event));default:break;}return QWidget::event(event);}bool gestureEvent(QGestureEvent *event){if (QGesture *pan = event->gesture(Qt::PanGesture)) {auto *panGesture = static_cast<QPanGesture*>(pan);qDebug() << "Pan gesture:" << panGesture->delta();}if (QGesture *pinch = event->gesture(Qt::PinchGesture)) {auto *pinchGesture = static_cast<QPinchGesture*>(pinch);qDebug() << "Pinch gesture - scale:" << pinchGesture->scaleFactor();}if (QGesture *swipe = event->gesture(Qt::SwipeGesture)) {auto *swipeGesture = static_cast<QSwipeGesture*>(swipe);qDebug() << "Swipe gesture - angle:" << swipeGesture->swipeAngle();}return true;}
};
多点触控支持
class MultiTouchWidget : public QWidget
{
protected:bool event(QEvent *event) override{if (event->type() == QEvent::TouchBegin ||event->type() == QEvent::TouchUpdate ||event->type() == QEvent::TouchEnd) {QTouchEvent *touchEvent = static_cast<
http://www.dtcms.com/a/473471.html

相关文章:

  • 基于JETSON ORIN/RK3588+AI相机:机器人-多路视觉边缘计算方案
  • 没有网怎么安装wordpress沈阳企业网站优化排名方案
  • 【C++STL :list类 (二) 】list vs vector:终极对决与迭代器深度解析 揭秘list迭代器的陷阱与精髓
  • 虚幻引擎入门教程:虚幻引擎的安装
  • FastbuildAI后端服务启动流程分析
  • AI×Cursor 零基础前端学习路径:避误区学HTML/CSS/JS
  • 新手小白——Oracle数据库.索引与数据完整性
  • 免费注册网站软件网站制作 东莞
  • Redis 的璀璨明珠:深入剖析有序集合 (ZSET) 的奥秘与艺术
  • 【Linux网络编程】多路转接reactor——ET模式的epoll
  • 深入理解线程池:核心处理流程与工作原理
  • 关于unity一个场景中存在多个相机时Game视图的画面问题
  • 中国室内设计网站排名太原建设银行网站
  • 手写MyBatis第104弹:SqlSession从工厂构建到执行器选择的深度剖析
  • 【力扣 SQL 50】连接
  • 手机的网站有哪些女装网站建设规划书
  • 《领码 SPARK 融合平台》投资研究报告(最终完整版)
  • 【Linux】操作系统上的进程状态及其转换
  • (done) 矩阵分块计算和分块转置
  • linux复习速通面试版
  • 大数据Spark(六十八):Transformation转换算子所有Join操作和union
  • HTTP初识
  • 【Linux网络】Socket编程:TCP网络编程
  • 离线docker安装jupyter(python网页版编辑器)
  • 自己怎么做彩票网站吗网站建设招标2017
  • 达梦守护集群部署安装
  • 农村电子商务网站建设wordpress不能安装插件
  • 每天五分钟深度学习:两个角度解释正则化解决网络过拟合的原理
  • 【Android Gradle学习笔记】第二天:Gradle工程目录结构
  • 【知识拓展Trip Six】宿主OS是什么,传统虚拟机和容器又有什么区别?