Qml TouchPointPressed without previous release event 错误处理

本文主要是介绍Qml TouchPointPressed without previous release event 错误处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 背景
  • 解决方案一(参考网上)
  • 解决方案二
  • 总结


背景

qml项目中遇到了错误:
TouchPointPressed without previous release event QQuickEventPoint(valid:true accepted:false state:Pressed scenePos:QPointF(164.333,152.333) id:2000002 timeHeld:0)
原因从错误可以看出,当点击时间触发了press但是没有收到release抬起事件,这种错误发生在当按钮处理函数需要耗时,然后却快速来回点击或者切换的情况下。


解决方案一(参考网上)

原文链接:https://blog.csdn.net/c_c8008/article/details/79726790

现象:多个可点击区域,多次点击切换后,有个别地方点击没反应(如应用中,底部导航栏分为5个页签,快速点击各个页签,数遍后有一个或两个页签点着就没反应了,无法再切换页面)

修改方法:
C:\Qt\Qt5.9.4\5.9.4\Src\qtdeclarative\src\quick\items\ qquickevents.cpp

修改

QQuickPointerEvent* QQuickPointerTouchEvent::reset(QEvent*event)函数中内容
修改后为:
bool b = false;for (int i = 0; i < newPointCount; ++i) {auto point = m_touchPoints.at(i);point->reset(tps.at(i), ev->timestamp());if (point->state() == QQuickEventPoint::Pressed) {if (grabbers.at(i)){qWarning() << "TouchPointPressed without previous release event" << point;b = true;}point->setGrabber(nullptr);} else {point->setGrabber(grabbers.at(i));}}m_pointCount = newPointCount;if (b){emit qGuiApp->applicationStateChanged(Qt::ApplicationInactive);emit qGuiApp->applicationStateChanged(Qt::ApplicationActive);}return this;

解决方案二

在qml页面中,耗时的操作可用Timer来进行触发,从而不会造成事件阻塞

Timer {id:backTimerinterval: 1; running: false; repeat: falseonTriggered:{UILogic.backToHome();}
}SoundTipPage
{id:tippagevisible: voiceTrans.state == "SoundTip"anchors.fill: parentonReturnToParent:{backTimer.start();}
}

上述代码中,UILogic.backToHome(); 会造成页面销毁,页面销Component.onDestruction里面做了很多释放其他sdk的工作,是一个相对来时耗时的操作(几百毫秒)。当快速页面切换的时候,程序会报该错误TouchPointPressed without previous release event ,用Timer出来之后解决。

总结

很多qml的有些耗时操作,阻塞主线程的,均可通过Timer来调用,会有意想不到的效果哦

这篇关于Qml TouchPointPressed without previous release event 错误处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077529

相关文章

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们

qml states 状态

states 状态 在QML中,states用于定义对象在不同状态下的属性变化。每个状态可以包含一组属性设置,当状态改变时,这些属性设置会被应用到对象上。 import QtQuick 2.15import QtQuick.Controls 2.15// 定义应用程序的主窗口ApplicationWindow {visible: true // 使窗口可见width: 640 /

QML入门之基本元素

元素分为可视元素与非可视元素,可能元素例如Rectangle、Button等。非可视元素如Timer(定时器)、MouseArea(鼠标区域)等。非可视元素一般用于操作可视元素。 基础元素 Item Item(基础元素对象)是所有可视元素的基础对象,它们都继承自Item。可是元素存在以下共有属性。 Group(分组)Properties(属性)Geometry(几何属性)x

fetch-event-source 如何通过script全局引入

fetchEventSource源码中导出了两种类型的包cjs和esm。但是有个需求如何在原生是js中通过script标签引呢?需要加上type=module。今天介绍另一种方法 下载源码文件: https://github.com/Azure/fetch-event-source.git 安装: npm install --save-dev webpack webpack-cli ts

myEclipse失去焦点时报错Unhandled event loop exception的解决方案

一句话:百度杀毒惹的祸。。。。果断卸载后问题解决。

WebAPI(二)、DOM事件监听、事件对象event、事件流、事件委托、页面加载与滚动事件、页面尺寸事件

文章目录 一、 DOM事件1. 事件监听2. 事件类型(1)、鼠标事件(2)、焦点事件(3)、键盘事件(4)、文本事件 3. 事件对象(1)、获取事件对象(2)、事件对象常用属性 4. 环境对象 this5. 回调函数 二、 DOM事件进阶1. 事件流(1)、 捕获阶段(2)、 冒泡阶段(3)、 阻止冒泡(4) 、阻止元素默认行为(5) 、解绑事件 2. 事件委托3. 其他事件(1)、页面加

ubuntu 编译android SDK错误处理

1.提示错误curses.h: No such file or directory 是因为没有安装ncurses sudo apt-get install libncurses5-dev 2./usr/bin/ld: cannot find -lncursesw collect2: ld returned 1 exit status make[1]: ***

鸿蒙轻内核M核源码分析系列十二 事件Event

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 轻内核M核源码分析系列一 数据结构-双向循环链表 轻内核M核源码分析系列二 数据结构-任务就绪队列 鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表 轻内核M核源码分析系列四 中断Hwi 轻内核M核源码分析系列五 时间管理 轻内核M核源码分析系列六 任务及任务调度(1)任务栈 轻内核M核源码分析系列六 任务及任务调度

Event Time源码分析

《2021年最新版大数据面试题全面开启更新》 flink 中Processing Time也就是处理时间在watermark定时生成、ProcessFunction中定时器与时间类型的窗口中都有使用,但是其内部是如何实现注册定时器、如何调用、如何容错保证在任务挂掉在下次重启仍然能够触发任务执行,都是我们今天的主题。首先需要了解一下在flink内部时间系统是由哪些类来共同完成这件事,下面画

sql server 安装及 错误处理方法

最近学校学习.net,要用到sql server。一般来说,管理数据库一种是像mySQL一样,在命令行那个黑乎乎的窗口下敲命令管理(但是我没有找到如何在命令行下管理sql server),那会显的你很牛B;另一种就是安装一个像SQLyog这样的可视化数据库管理软件,sql server 2008 management studio就是这样的软件。大部分同学已经安装了Visual Studio 2