2012-02-13 130 views
1

我希望在選擇qtreeview時按下Enter鍵時發生「事件」。因爲我不希望子類qtreeview(更容易爲設計師) - 我試圖安裝一個事件過濾器。然而,這似乎並沒有工作:QT eventfilter for qtreeview無法正常工作?

類僅包含一個公共職能:

bool InputTreeEventHandler::eventFilter(QObject *obj, QEvent *event) const { 
    if (event->type() == QEvent::KeyPress) { 
     QKeyEvent *keyevent = dynamic_cast<QKeyEvent*>(event); 
     QTreeView* tree = dynamic_cast<QTreeView*>(obj); 
     if (keyevent->key() == Qt::Key_Enter) { 
      //code 
     } 
    } else { 
     return false; 
    } 

} 

並添加事件類似如下:

ui.InputTreeView->installEventFilter(InputTreeKeyboardEater.get()); 

哪裏ui.InputTreeView是我樹狀希望按下輸入時動作,並且InputTreeKeyboardEater a(共享)指向一個對象的指針InputTreeEventHandler

當把一個breakpoi nt在上面的函數啓動時顯示整個事件處理程序甚至沒有被調用 - 我可能做錯了什麼?

回答

4

請參閱here - QObject::eventFilter不是常量,這可以解釋您的問題。 InputTreeView正在尋找一個非const的版本,這是不存在的。另外eventFilter是保護不公開,雖然我不認爲這是至關重要的。

+0

謝謝,我一直對qt的常量正確性「缺乏」感到驚訝:/ – paul23 2012-02-13 20:53:09

+0

@ paul23爲什麼eventfilter函數應該是const?實施者可能想要修改這個 - 而且這不應該需要演員... – 2013-06-04 12:35:10