我写了一个Qt小部件,它使用MouseEvents(通过覆盖mousePressEvent
(和TabletEvents(通过覆盖tabletEvent
(。 平板电脑事件处理程序接受所有传入事件:
void StyleWidget::tabletEvent(QTabletEvent *event) {
event->accept();
...
}
问题是,Qt为平板电脑生成鼠标事件,但我无法区分真实的鼠标事件和这些平板电脑生成的鼠标事件。
是否有可能抑制这些鼠标事件?
编辑:该程序在Windows下运行。
如果鼠标事件是由 Qt 本身生成的,那么你可以在main()
函数中执行此操作:
QApplication::setAttribute(Qt::AA_SynthesizeMouseForUnhandledTabletEvents, false);
还有其他一些类似的属性,如上所示:
QApplication::setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents, false);
QApplication::setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents, false);
但是,如果鼠标事件是由操作系统生成的(Windows这样做(,那么您也需要使用它们,并通过source()
过滤掉鼠标事件:
void YourWidget::mousePressEvent(QMouseEvent *event)
{
if(event->source() == Qt::MouseEventNotSynthesized) {
// it is a real mouse event!
}
event->accept();
}