Qt 5.5 WebEngineView 和多点触控

Posted

技术标签:

【中文标题】Qt 5.5 WebEngineView 和多点触控【英文标题】:Qt 5.5 WebEngineView and multitouch 【发布时间】:2015-12-03 11:53:07 【问题描述】:

目标:内部带有 WebEngineView 的响应式多点触控矩形。

我正在制作多点触控网络浏览器。现在,我在矩形中制作了浏览器,上面有多点触控区域,它对应于一些带有矩形调整大小的多点触控操作,并且在短按时通过 runjavascript 函数将带有点击事件的 javascript 发送到网页。但它有问题,例如拒绝 js 输入的谷歌表单。所以我尝试在qt中构建点击模拟。

模拟器代码。

QMouseEvent * event1 = new QMouseEvent (QEvent::MouseButtonPress, QPoint(x,y),
    Qt::MiddleButton,
    Qt::MiddleButton,
    Qt::NoModifier   );

bool resp1  = QCoreApplication::sendEvent(mainWindow,event1);

QMouseEvent * event2 = new QMouseEvent (QEvent::MouseButtonRelease, QPoint(x,y),
    Qt::MiddleButton,
    Qt::MiddleButton,
    Qt::NoModifier   );

bool resp2  = QCoreApplication::sendEvent(mainWindow,event2);

它适用于某些情况,但不是全部。问题是mainWindow是ApplicationWindow,所以x是浏览器矩形的x+矩形触摸的x,和y类似。

我在这个点击模拟中使用了 MiddleButton,这就是问题所在。并非每个 Web 按钮都接收中间按钮单击作为提交单击。所以我需要将左键单击直接传递给 webengineview。但是当我做这个应用程序崩溃时,因为 multitoucharea 首先接收它作为触摸并再次发送一个点击模拟。它创建了无限循环。

问题是: 如何将模拟的左击直接发送到 WebEngineView?

【问题讨论】:

HOTFIX [临时]。在我运行 click simylator 之前,禁用 toucharea,然后使用 click 模拟器操作,启用 toucharea。这不是一个好的解决方案,但它现在可以工作。 【参考方案1】:

好的...我找到了答案。 MultiPointTouchArea 具有属性 mouseEnabled。当为 false 时,触摸组件将忽略鼠标事件。

【讨论】:

以上是关于Qt 5.5 WebEngineView 和多点触控的主要内容,如果未能解决你的问题,请参考以下文章

Qt/QML:WebEngineView 和 ScrollView

Qt 5.7 WebEngineView、HTML5 音频/视频和 WebRTC

将鼠标点击发送到 WebEngineView Qt C++

qt webengineview 加载本地资源方式

WPF学习第十八章 多点触控输入

QtCreator 4.1.0 不显示 MainWindow 表单编辑器的 webengineview(QT 5.7)