我想在我的小部件(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_TouchPadAcceptSingleTouchEvents
。 enum Qt::WidgetAttribute
的文档列出了前面一节中的相应属性
警告:该标志决不能由小部件的作者设置或清除。
这在以前的文档中更加明确(例如Qt 4.8中的enum Qt::WidgetAttribute
)。
你需要有一个父主窗口来抓取手势,参见QTBUG#14224 。