我正在尝试在我的小部件(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.
但不能轻易重现。
为什么我收不到手势事件?
最佳答案
您不得在小部件上设置 Qt::WA_TouchPadAcceptSingleTouchEvents
。 enum Qt::WidgetAttribute
的文档在前面的部分中列出相应的属性
Warning: This flag must never be set or cleared by the widget's author.
这在早期的文档中更为明确(例如 enum Qt::WidgetAttribute
for Qt 4.8)。
关于c++ - Qt 手势。没有收到 qgesture 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21548898/