首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QT中使用触摸屏的Windows 10手势的(一般)方法是什么?

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

Stack Overflow用户
提问于 2020-05-14 15:57:04
回答 2查看 572关注 0票数 0

我希望在QT (C++,Visual )中使用由Windows 10触摸屏手势生成的事件:

  • 两指夹在触控板上进行缩放
  • 触控板上的两指平底锅

QT文档/ QTCreator有一个用于手势的示例。显然,使用QGesture类显示的方法只适用于触摸屏。我在没有自己的代码的情况下直接测试了这个例子。

我怀疑QNativeGestureEvent可以做我想做的事情,但是没有例子。

有人能确认QNativeGestureEvent是解决我任务的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-05-14 16:13:13

你得抓住手势。有关更多细节,请查看本文件。总的来说,关于这个主题的文档已经有所改进,但还远远没有完成。

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

我会检查一下触摸屏会产生什么事件。Qt能够处理多个同时发生的触摸事件(否则就不可能出现变焦和pan等手势),因此所有这些都归结为Qt在数据方面可以从触摸屏上得到什么。

票数 0
EN

Stack Overflow用户

发布于 2020-05-30 17:34:30

因此,我找到了一种可以接受的解决方案:

最起码的例子:

标题:

代码语言:javascript
复制
class MyWidget : public QLabel {
// in this case: QLabel is base class

// ... constructors etc...


protected:
    void wheelEvent(QWheelEvent *) override;
};

cpp

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61801830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档