如何从QML到C ++传递TouchPoint列表?

时间:2019-01-31 09:41:04

标签: c++ qt qtquick2

我正在使用MultiPointTouchArea,并且希望在触发onPressed,onReleased或onUpdated时将接触点列表传递给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>");

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

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

这是可能的解决? 如果没有,那么我有什么选择将所有信息从TouchPoint传递到C ++?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果您真的坚持要使用C ++的多点触摸功能,则只需拦截C ++端的触摸事件,而不必担心MultiPointTouchArea,我的意思是,如果这确实是您所需要的。

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

更明智的方法是包括一个仅接收相关输入信息的界面。