我想在QT(C++,Visual Studio)中使用Windows 10触摸板手势产生的事件。
QT文档QTCreator有一个 例子 的手势。很显然,使用所示的方法。QGesture 类只适用于触摸屏。我直接在例子上测试,没有任何自己的代码。
我怀疑 QNativeGestureEvent 某种程度上可以做到我想要的,但没有例子。
谁能确认QNativeGestureEvent是解决我的任务的方法?
所以我找到了一个可以接受的解决方案。
最简单的例子:
header.cpp
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为零。 这暂时是可以接受的。
我在使用手势方法时没有任何运气;我知道这些方法是为了触控屏幕 不碰垫子. 我的电脑没有触摸屏来测试这个。
你需要抓住手势。检查一下 本文件 了解更多细节。总的来说,关于这个主题的文档已经有所改进,但仍远未完成。
一旦你启用了手势,你只需要处理这些事件。你也可以实现你自己的手势,但是你需要自定义手势事件和手势识别(这里的文档是不存在的,因为自定义手势识别本身就不在Qt的范围内)。我已经用一个简单的鼠标完成了这个任务,所以应该不会太难。以下是我所做的. 请注意,该代码是3年前的,所以事情可能已经改变。此外,它并不完美,如果我没有记错的话,有一些错误,但它应该是一个好的开始。我开发它是为了将鼠标手势(使用笔记本的触控板)添加到widget中。
我会检查触摸板产生的事件。Qt 能够处理多个同时发生的触摸事件(否则就不可能有缩放和平移这样的手势),所以这一切都归结于 Qt 能够从触摸板上获得什么数据。