我希望在QT (C++,Visual )中使用由Windows 10触摸屏手势生成的事件:
QT文档/ QTCreator有一个用于手势的示例。显然,使用QGesture类显示的方法只适用于触摸屏。我在没有自己的代码的情况下直接测试了这个例子。
我怀疑QNativeGestureEvent可以做我想做的事情,但是没有例子。
有人能确认QNativeGestureEvent是解决我任务的方法吗?
发布于 2020-05-14 16:13:13
你得抓住手势。有关更多细节,请查看本文件。总的来说,关于这个主题的文档已经有所改进,但还远远没有完成。
一旦启用了手势,您只需处理这些事件。您也可以实现自己的手势,但为此您需要定制手势事件和手势识别(这里的文档不存在,因为自定义手势识别本身超出了Qt的范围)。我用一个简单的鼠标完成了这个任务,所以应该不会太困难。这是我有的东西。请注意,代码是从3年前开始的,所以情况可能已经发生了变化。而且,这并不完美,如果我没记错的话,会有一些错误,但这应该是一个好的开始。我开发它是为了将鼠标手势(使用笔记本的触控板)添加到小部件中。
我会检查一下触摸屏会产生什么事件。Qt能够处理多个同时发生的触摸事件(否则就不可能出现变焦和pan等手势),因此所有这些都归结为Qt在数据方面可以从触摸屏上得到什么。
发布于 2020-05-30 17:34:30
因此,我找到了一种可以接受的解决方案:
最起码的例子:
标题:
class MyWidget : public QLabel {
// in this case: QLabel is base class
// ... constructors etc...
protected:
void wheelEvent(QWheelEvent *) override;
};cpp
void MyWidget::wheelEvent(QWheelEvent *e)
{
if (e->modifiers() & Qt::ControlModifier) {
qDebug() << "zoom " << e->angleDelta().y();
}
else
{
qDebug() << "pan x " << e->angleDelta().x();
qDebug() << "pan y " << e->angleDelta().y();
}
e->accept();
}这分别给出了x值和y值,分别用于摇摄和缩放。这种方法的极限是,它只给出一个轴的值,而摇摄,即x或y为零;,这是目前可以接受的。
我没有运气使用手势方法,我知道这些是为触摸屏而不是触摸屏而设计的。我的电脑没有触摸屏来测试这个。
https://stackoverflow.com/questions/61801830
复制相似问题