Qt手势。没有收到qgesture事件

时间:2014-02-04 09:47:58

标签: c++ windows qt

我正在尝试在我的小部件(QWidget的子类)中获取QGesture事件。我的构造函数中有以下内容:

setAttribute(Qt::WA_AcceptTouchEvents);
setAttribute(Qt::WA_TouchPadAcceptSingleTouchEvents);
grabGesture(Qt::SwipeGesture);
grabGesture(Qt::PanGesture);
grabGesture(Qt::PinchGesture);

我有自己的事件功能:

bool MyWidget::event(QEvent *event)
{
  if(event->type() == QEvent::Gesture)
  {
    TRACE("Gesture");
  }
  if(event->type() == QEvent::GestureOverride)
  {
    TRACE("Gesture override");
  }
  if(event->type() == QEvent::Enter)
  {
    TRACE("Mouse enter");
  }
  return true;
}

在Windows 7上,我收到鼠标输入事件,但没有别的。 (我使用ms surface sdk输入模拟器按照建议的here生成触摸事件)。偶尔我收到消息

QGestureManager::deliverEvent: could not find the target for gesture.

但不能轻易重现这一点。

为什么我没有收到手势事件?

2 个答案:

答案 0 :(得分:2)

您不得在小部件上设置Qt::WA_TouchPadAcceptSingleTouchEventsenum Qt::WidgetAttribute的文档列出了以

开头的部分中的相应属性
  

警告:小部件的作者绝不能设置或清除此标志。

以前的文档中曾经更明确(例如enum Qt::WidgetAttribute for Qt 4.8)。

答案 1 :(得分:1)

您需要有一个父主窗口才能抓取手势,请参阅QTBUG #14224