如何将接触点列表从QML传递到C++
How to pass list of TouchPoints from QML to C++?
我正在使用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++ 之间隐式转换的类型列表不包括接触点,更不用说此类列表了。
更理智的方法将包括一个仅接收相关输入信息的接口。
相关文章:
- 从C++实例化QML
- 使用CMake创建QML插件
- QT通过C++添加映射QML项目
- 如何在没有信号的情况下从C++执行QML插槽
- QML按钮点击功能执行顺序
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- Qt Quick-如何仅从c++代码与qml属性交互
- 如何将带有自定义对象的容器从C++传递到QML
- QML 使用带有参数C++函数
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 如何从C++端挂接到 QML 项的 onClick 事件
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 从C++更改 QML 图像源
- QML TableView 使用 QtQuick.Controls 2 单击行
- 如何多次询问来自QML对话框的输入?
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 阅读 QML 中结构C++ QVector 的 QVector
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- Qt QML桌面应用程序自动化测试