在QT中使用Windows 10触摸板手势的(一般)方法是什么?

问题描述 投票:0回答:1

我想在QT(C++,Visual Studio)中使用Windows 10触摸板手势产生的事件。

  • 在触摸板上捏住两个手指进行缩放
  • 触摸板上的双指平移,用于平移

QT文档QTCreator有一个 例子 的手势。很显然,使用所示的方法。QGesture 类只适用于触摸屏。我直接在例子上测试,没有任何自己的代码。

我怀疑 QNativeGestureEvent 某种程度上可以做到我想要的,但没有例子。

谁能确认QNativeGestureEvent是解决我的任务的方法?

qt gesture windows-10-desktop touchpad trackpad
1个回答
0
投票

所以我找到了一个可以接受的解决方案。

最简单的例子:

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为零。 这暂时是可以接受的。

我在使用手势方法时没有任何运气;我知道这些方法是为了触控屏幕 不碰垫子. 我的电脑没有触摸屏来测试这个。


0
投票

你需要抓住手势。检查一下 本文件 了解更多细节。总的来说,关于这个主题的文档已经有所改进,但仍远未完成。

一旦你启用了手势,你只需要处理这些事件。你也可以实现你自己的手势,但是你需要自定义手势事件和手势识别(这里的文档是不存在的,因为自定义手势识别本身就不在Qt的范围内)。我已经用一个简单的鼠标完成了这个任务,所以应该不会太难。以下是我所做的. 请注意,该代码是3年前的,所以事情可能已经改变。此外,它并不完美,如果我没有记错的话,有一些错误,但它应该是一个好的开始。我开发它是为了将鼠标手势(使用笔记本的触控板)添加到widget中。

我会检查触摸板产生的事件。Qt 能够处理多个同时发生的触摸事件(否则就不可能有缩放和平移这样的手势),所以这一切都归结于 Qt 能够从触摸板上获得什么数据。

© www.soinside.com 2019 - 2024. All rights reserved.