Qt :: AA_SynthesizeMouseForUnhandledTouchEvents在Windows上

我创build了一个简单的小部件,输出它接收到的鼠标和触摸事件到qDebug() (摘录):

 // ... MyWidget::MyWidget(QWidget *parent) : QWidget(parent), acceptEvents(false) { this->setAttribute(Qt::WA_AcceptTouchEvents); } static QEvent::Type const mouseEventTypes[] = { QEvent::MouseButtonDblClick, QEvent::MouseButtonRelease, QEvent::MouseButtonPress, QEvent::MouseMove }; static QEvent::Type const touchEventTypes[] = { QEvent::TouchBegin, QEvent::TouchUpdate, QEvent::TouchEnd }; template<typename Container, typename Value> bool contains(Container const & c, Value const & v) { return std::find(std::begin(c), std::end(c), v) != std::end(c); } bool MyWidget::event(QEvent * e) { auto type = e->type(); if(contains(mouseEventTypes, type)) qDebug() << "MouseEvent"; else if(contains(touchEventTypes, type)) qDebug() << "TouchEvent"; else return QWidget::event(e); e->setAccepted(this->acceptEvents); return true; } // ... const bool acceptEvents = true; const bool synthesizeMouse = false; int main(int argc, char *argv[]) { QApplication app(argc, argv); app.setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents, synthesizeMouse); MainWindow gui; // contains a MyWidget as centralWidget gui.setAcceptEvents(acceptEvents); gui.show(); return app.exec(); } 

但是,无论我如何设置acceptEventssynthesizeMouse ,当我在我的系统(Windows 7系统)上使用多点触控监视器时,我总是会收到鼠标和触摸事件。 触摸事件被接受时,有没有什么办法可以在使用Qt的Windows上获得触摸事件?

更新:

实际上没有logging的nomousefromtouch参数也没有任何效果,但是对于Qt 5.3, QMouseEvent::source()报告大多数Qt::MouseEventSynthesizedBySystem (是的,大多数情况下…在极less数情况下, Qt::MouseEventNotSynthesized报告为鼠标移动)合成的小鼠事件。 这意味着我可能会自己消除这些事件(大部分时间),但是更好/更简单/更清洁的解决scheme将不胜感激。

如你所说,我没有运气设置属性。 但是,当我在应用程序的开始处将属性从app.setAttribute()设置为QCoreApplication::setAttribute()时,事情开始为我解决。

你应该尝试一下。