問題:QT圖形視圖框架,QGraphicsScene中默認(rèn)接收觸控事件,會(huì)將第一個(gè)點(diǎn)當(dāng)作鼠標(biāo)事件處理。
在開發(fā)者開發(fā)的時(shí)候,可能會(huì)有這樣的需求,希望自己的觸控事件和鼠標(biāo)事件能夠分割開來。
找到的解決方法:
方案一:文章來源:http://www.zghlxwxcb.cn/news/detail-566104.html
setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents);
setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents);
問題沒有解決,修改這兩個(gè)參數(shù),也無法讓QT的觸控單擊事件有響應(yīng)。
方案二:
重寫mouse事件,調(diào)用source事件將觸控事件的強(qiáng)制轉(zhuǎn)換給過濾掉,不接收鼠標(biāo)事件,觸控單擊仍然沒有反應(yīng)。
方案三:
將事件分發(fā)寫在QGraphicsView中。
QGraphicsView中有兩個(gè)函數(shù),一個(gè)為viewportevent()一個(gè)為event(),二者都能用來接收觸控事件,但是內(nèi)部實(shí)現(xiàn)機(jī)制有所區(qū)別,viewportevent()默認(rèn)將觸控單擊第一個(gè)點(diǎn)轉(zhuǎn)為鼠標(biāo)事件,而event()分發(fā)則不會(huì)將觸控單擊的第一個(gè)點(diǎn)轉(zhuǎn)為鼠標(biāo)事件,也就是即使不重寫鼠標(biāo)事件,也不影響多點(diǎn)觸控的單擊,同樣,在QWidget重寫event()函數(shù)中也是如此,并不會(huì)默認(rèn)轉(zhuǎn)換,所以如果要實(shí)現(xiàn)觸控和鼠標(biāo)事件的分離,事件分發(fā)最好用QWidget和QGraphicsView中重寫event()函數(shù),經(jīng)過測試,問題已經(jīng)解決。文章來源地址http://www.zghlxwxcb.cn/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);
}
到了這里,關(guān)于QT 觸控事件和鼠標(biāo)事件的分離(問題已解決)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!