我正在尝试在我的小部件(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.
但不能轻易重现这一点。
为什么我没有收到手势事件?
答案 0 :(得分:2)
您不得在小部件上设置Qt::WA_TouchPadAcceptSingleTouchEvents
。 enum Qt::WidgetAttribute
的文档列出了以
警告:小部件的作者绝不能设置或清除此标志。
以前的文档中曾经更明确(例如enum Qt::WidgetAttribute
for Qt 4.8)。
答案 1 :(得分:1)
您需要有一个父主窗口才能抓取手势,请参阅QTBUG #14224。