当前位置: 首页 > 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 
#include 
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(event));default:break;}return QWidget::event(event);}bool gestureEvent(QGestureEvent *event){if (QGesture *pan = event->gesture(Qt::PanGesture)) {auto *panGesture = static_cast(pan);qDebug() << "Pan gesture:" << panGesture->delta();}if (QGesture *pinch = event->gesture(Qt::PinchGesture)) {auto *pinchGesture = static_cast(pinch);qDebug() << "Pinch gesture - scale:" << pinchGesture->scaleFactor();}if (QGesture *swipe = event->gesture(Qt::SwipeGesture)) {auto *swipeGesture = static_cast(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.jsqmd.com/news/35249/

相关文章:

  • 线段树(p1083)
  • 初识PPO
  • [ vmware 连接宿主机代理 ]
  • 【Android】六大设计原则 - 教程
  • 2025年合肥甲醛检测公司哪家好?专业机构排名与选择指南
  • 现今除甲醛机构选哪家?深度分析
  • Unity2D 图片支持拖拽和以鼠标中心缩放
  • 轻松可视化信息的利器——JSON Crack
  • 详细介绍:C++微基础备战蓝桥杯string篇10.5
  • [ jupyter conda 环境]
  • 深入解析:仿mudou——Connection模块(连接管理)
  • Linux中查看个人磁盘容量
  • 以太坊私有链搭建与智能合约部署指南 - 教程
  • C 函数
  • 完整教程:Redis-Zest
  • (数学)好玩但没啥用的解题方法(1)
  • 2025年11月中国伸缩门厂家综合实力排行榜TOP5
  • 我目前所理解的“生成式认知主体”
  • P10627 中暑
  • C语言“变量”与Python“Name”:跨语言核心概念及内存模型辨析
  • 逆向基础--C++介绍与环境 (01)
  • 【技术术语】静默失效
  • 深入解析:Git Commit Message 最佳实践:从一次指针Bug说起
  • 2025年文化节活动篷房订做厂家权威推荐榜单:航空机库篷房/体育篷房/宴会篷房源头厂家精选
  • Docker 资源限制与容器管理 - 详解
  • 【技术术语】惊群效应
  • 使用 gitee 完整简要演示 20251108
  • Spide - Personal Blog Magazine WordPress Theme Download - 详解
  • 【技术术语】即发即弃
  • 深入解析:wpf之命令