2011-12-17 76 views
3

我正在寫一個從3個鼠標獲取輸入的應用程序。 2個鼠標用於手勢,它們的輸入分開處理,第3個應該正常運行。 我已成功安裝了運行我自己的鼠標處理代碼(processMouse())的eventfilter(見下文)。有選擇地忽略Qt中的鼠標事件

但是,當試圖讓過濾器忽略來自某些鼠標的事件(由布爾返回值processMouse())確定時,不會有任何事情被忽略。

我試過使用正常的真/假返回值,將事件重置爲「無」事件,調用它的忽略功能,但即使我告訴它忽略事件,鼠標仍然保持移動。

bool MainWindow::eventFilter(QObject *obj, QEvent *event){ 
    if ((event->type() == QEvent::MouseMove) || 
     (event->type() == QEvent::MouseButtonPress)){ 
     if (configured){ 
      if (!processMouse()){ 
       //event->ignore(); 
       //event = new QEvent(QEvent::None); 
      } 
     } 
     return true; 

    } 
    return false; 
} 

我怎樣才能選擇性忽略來自eventfilter的MouseMove事件?

+1

鼠標移動不由Qt處理,它由窗口管理器處理。 mouseMove事件只是從窗口管理器到Qt的一個信號,你不能從你的應用程序中取消它(不知道你的窗口管理器和環境有很多) – Mat 2011-12-17 15:14:10

+0

將事件分配給事件並不會改變原始事件它的處理)。它只是改變你的本地指針變量的值,現在指向新創建的事件(它將會丟失),而不是實際處理的事件。該分配對於您的方法是本地的,它不會在其他地方被注意到。 – 2011-12-17 15:25:04

+0

感謝您的澄清,我現在試圖通過使用我的processMouse函數的返回值來確定光標的位置是否應該設置回來。它可能不會像繪製和實現一個新的一樣漂亮,但它應該適用於我的目的。 – Energya 2011-12-18 02:03:46

回答

2

這最終通過使用名爲「ManyMouse」的第三方庫解決,該庫分別接收每個鼠標的輸入。