如何将接触点列表从QML传递到C++

How to pass list of TouchPoints from QML to C++?

本文关键字:QML C++ 列表 接触 触点      更新时间:2023-10-16

我正在使用MultiPointTouchArea,并希望在触发onPressed,onRelease或onUpdate时将接触点列表传递给C++侧。

这是我尝试过的没有成功:

QML:

MultiPointTouchArea  {
  minimumTouchPoints: 1
  maximumTouchPoints: 2
  touchPoints: [
    TouchPoint { id: touch1 },
    TouchPoint { id: touch2 }
  ]
  onPressed: {
    myCPlusPlusClass.onPressed(touchPoints)
  }
}

C++:

void myCPlusPlusClass::onPressed(const QList<QTouchEvent::TouchPoint>& list) 
{
  // Do something
}

我已经将QListQTouchEvent::TouchPoint注册为元类型,如下所示:

qRegisterMetaType<QList<QTouchEvent::TouchPoint>>("QList<QTouchEvent::TouchPoint>");

我没有收到任何错误,但是列表只是 i nullptr 或类似的C++。

我的第二个最佳选择是单独传递接触点(而不是在列表中)。

这有可能解决吗?如果没有,我可以选择什么将所有信息从接触点传递到C++端?

我认为一种方法可能是传递给C++一个关于组件状态的易于解析的"报告"。Dunno现在在TouchPoint中有哪些属性,但大概将它们转储到文本似乎很容易可行(也许使用Array.join)。然后从C++解析回来并使用该数据。

如果你真的坚持使用C++的多点触控,你可以简单地拦截C++端的触摸事件,而不用打扰MultiPointTouchArea,我的意思是,如果这就是你所需要的。

期望此代码正常工作是相当困难的,在 QML 和 C++ 之间隐式转换的类型列表不包括接触点,更不用说此类列表了。

更理智的方法将包括一个仅接收相关输入信息的接口。