完整教程:Windows Pad平板对 Qt 的支持

news/2025/11/8 18:49:17/文章来源:https://www.cnblogs.com/gccbuaa/p/19202874

        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.mzph.cn/news/959911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线段树(p1083)

P1083 [NOIP 2012 提高组] 借教室 题目描述 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对…

初识PPO

for batch_prompt in prompt_dataset:batch_response = active_model.generate(batch_prompt)batch_data = concat(batch_prompt, batch_response)batch_scores = reward_model(batch_data)batch_all_probs, batch_pro…

[ vmware 连接宿主机代理 ]

# 本文只讲原理,只是技术研究 # 1. Tun 开启 -> 本质开启一张虚拟网卡; 允许局域网连接 # 2. 虚拟机默认走 Nat -> VMnet8 # 3. Tun的网卡开启网络共享,共享给 VMnet8

【Android】六大设计原则 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年合肥甲醛检测公司哪家好?专业机构排名与选择指南

摘要 随着人们对室内空气质量的重视程度不断提高,甲醛检测行业在2025年迎来了快速发展期。本文基于市场调研和用户反馈,为您精选五家优质甲醛检测机构,并提供详细对比分析。文末附有专业选择指南和参考表单,助您找…

现今除甲醛机构选哪家?深度分析

摘要 随着室内空气污染问题日益受到关注,除甲醛行业在2025年迎来了快速发展。消费者对靠谱、专业除甲醛服务的需求激增,本文基于权威数据和用户反馈,整理了目前国内除甲醛机构排名前十的榜单,并为读者提供选择指南…

Unity2D 图片支持拖拽和以鼠标中心缩放

引言: 作为一个Unity初学者,遇到了需要实现以鼠标为中心缩放的功能且需要支持拖拽,秉着复用主义的原则,在网上查找了不少博客,要么免费但不能直接拿来使用,要么需要VIP充值获取项目代码,此外,原理且讲解甚少。…

轻松可视化信息的利器——JSON Crack

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:C++微基础备战蓝桥杯string篇10.5

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[ jupyter conda 环境]

在激活的环境中,可以通过以下命令安装所需的库(包括 NumPy、Pandas、JupyterLab),以及配置自动补全功能,步骤如下: 1. 安装核心库(NumPy、Pandas、JupyterLab) 在激活 myenv 环境后,直接用 conda install 安装…

深入解析:仿mudou——Connection模块(连接管理)

深入解析:仿mudou——Connection模块(连接管理)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

Linux中查看个人磁盘容量

001、 lfs quota -u s20223040682 /public/home/s20223040682

以太坊私有链搭建与智能合约部署指南 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【学弟向】图的存储与遍历,最短路,连通性 tarjan,树状数组

树状数组 单点修改,前缀查询。 int lbd(int x) {return (x&(-x));} void gai(int x,int c) {for(int i=x;i<=n;i+=lbd(i)) a[i]+=c;} int cha(int x) {int da=0;for(int i=x;i;i-=lbd(i)) da+=a[i];return da;…

2025年11月中国伸缩门制造企业技术实力排行榜TOP5

摘要 随着智慧城市建设的深入推进,2025年中国伸缩门行业迎来技术升级浪潮。智能防夹技术、物联网集成系统和节能驱动技术成为行业新标准,市场需求同比增长23.6%。本文基于企业研发投入、专利数量、客户案例等权威数据…

完整教程:Redis-Zest

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

(数学)好玩但没啥用的解题方法(1)

\[a\geq 0,b\geq 0,a+b=1,求\sqrt{a}+\sqrt{b}的最大与最小值 \]设 \(x=\sqrt{a},y=\sqrt{b}\) ,则\(a+b=1<=>x^2+y^2=1\),是一个单位圆,而 \(\sqrt{a}+\sqrt{b}=x+y\) 。 容易注意到 \(x+y\) 为 \((0,0)\…

2025年11月中国伸缩门厂家综合实力排行榜TOP5

摘要 随着智慧城市建设的深入推进,伸缩门行业在2025年迎来技术升级与市场扩容的双重机遇。本文基于产品性能、技术创新、服务网络及客户案例等维度,对国内主流伸缩门厂家进行综合评估,为政府采购、企业采购提供权威…

我目前所理解的“生成式认知主体”

# 我目前所理解的“生成式认知主体”>前言:[写作能力提升的结构化路径](https://chat.deepseek.com/share/zq67x3d1xpamytl5qp)>在我有打算写关于这个主题的内容前实际上经过了很长时间的 整理思想、理清方向、…

P10627 中暑

题目大意: 有 \(n\) 个盒子,每个盒子有个容量 \(a_{i}\),接下来有 \(m\) 次投球操作。 每次给定一个 \(x\),表示你可以将当前这个球放到第 \(x\) 或者第 \(x + 1\) 个盒子里(前提是他没满),如果两个盒子都满了,…