2012-04-21 82 views
2

發生我有這樣的代碼:的Qt:如何防止QKeyEvent中的QTextEdit

bool MainWindow::eventFilter(QObject *obj, QEvent *event) 
{ 
    QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event); 

    if (event->type() == QEvent::KeyPress) 
    { 
     if (keyEvent->key() == Qt::Key_Tab) 
      // do something 
    } 
} 

現在,我打字在一個QTextEdit。所以說我點擊了tab鍵。然後一個選項卡將出現在QTextEdit中。但是如果我想防止這種情況發生呢?舉個比方,如果您熟悉emacs:在合適的環境下(比如C++模式),您可以點擊標籤,並且該行跳轉到正確的位置(縮進)。再次點擊標籤後,沒有任何反應。這是因爲代碼行處於正確的位置。

這裏的任何人都知道如何做到這一點?我想我可以讓標籤事件顯示在QTextEdit中,然後刪除以前的字符(或任何它被定義爲)。

回答

3

使用你的事件過濾器函數的返回值可以讓您控制您的QTextEdit接收該事件(如果你真的不想只是它的子類):

if (keyEvent->key() == Qt::Key_Tab) 
    return true; 

返回true表明,該事件應被過濾。

+0

工程就像一個魅力!謝謝! :) – raze 2012-04-21 19:09:11

2

您不應該需要全局事件過濾器來執行特殊的鍵盤處理(除非由於某些原因,您無法編輯其中部件被設置爲QTextEdit的部分)。您可以直接從的QTextEdit派生類並覆蓋其虛擬按鍵方法:

http://doc.qt.io/qt-5/qwidget.html#keyPressEvent

要獲得一個給定的keyEvent默認行爲,您將通過它傳遞給QTextEdit::keyPressEvent(),而忽略它,你將只返回無稱之爲。

+0

是的,我會完全重寫代碼。只是在Qt框架中測試某些功能。感謝您的評論! – raze 2012-04-21 19:10:21