问题:QT图形视图框架,QGraphicsScene中默认接收触控事件,会将第一个点当作鼠标事件处理。
在开发者开发的时候,可能会有这样的需求,希望自己的触控事件和鼠标事件能够分割开来。
找到的解决方法:
方案一:文章来源:https://www.toymoban.com/news/detail-566104.html
setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents);
setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents);
问题没有解决,修改这两个参数,也无法让QT的触控单击事件有响应。
方案二:
重写mouse事件,调用source事件将触控事件的强制转换给过滤掉,不接收鼠标事件,触控单击仍然没有反应。
方案三:
将事件分发写在QGraphicsView中。
QGraphicsView中有两个函数,一个为viewportevent()一个为event(),二者都能用来接收触控事件,但是内部实现机制有所区别,viewportevent()默认将触控单击第一个点转为鼠标事件,而event()分发则不会将触控单击的第一个点转为鼠标事件,也就是即使不重写鼠标事件,也不影响多点触控的单击,同样,在QWidget重写event()函数中也是如此,并不会默认转换,所以如果要实现触控和鼠标事件的分离,事件分发最好用QWidget和QGraphicsView中重写event()函数,经过测试,问题已经解决。文章来源地址https://www.toymoban.com/news/detail-566104.html
bool wbView::event(QEvent *event)
{
if(event->type()==QTouchEvent::TouchEnd||event->type()==QTouchEvent::TouchBegin||event->type()==QTouchEvent::TouchUpdate)
{
if(touchEvent(static_cast<QTouchEvent*>(event)))
return true;
}
return QGraphicsView::event(event);
}
到了这里,关于QT 触控事件和鼠标事件的分离(问题已解决)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!