Qt手势。 没有收到qgesture事件

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

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

我有我自己的事件function:

 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上,我收到鼠标input事件,但没有别的。 (我正在使用ms surface sdkinput模拟器来产生这里所build议的触摸事件)。 我偶尔会收到消息

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

但不能轻易重现这一点。

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

您不能在小部件上设置Qt::WA_TouchPadAcceptSingleTouchEventsenum Qt::WidgetAttribute的文档列出了前面一节中的相应属性

警告:该标志决不能由小部件的作者设置或清除。

这在以前的文档中更加明确(例如Qt 4.8中的enum Qt::WidgetAttribute )。

你需要有一个父主窗口来抓取手势,参见QTBUG#14224 。