2014-09-25 1399 views
1

我正在使用editingFinished()信號QLineEdit執行操作。該文件表示,當按下回車鍵或回車鍵或失去焦點時,會發出此信號。信號returnPressed()和editingFinished()不適用於QLineEdit

它與numlock(Windows鍵盤)上的enter key以及它在失去焦點時運行良好,但是當我按下鍵盤上的「返回鍵」時,信號不會發出。我嘗試使用returnPressed()信號,它的行爲方式相同。

我錯過了什麼?

謝謝

回答

2

子類QLineEdit

重新實現keyPressEvent()

捕捉Qt::Key_Enter按壓並做你的工作或發出信號自己

從技術文檔:

Qt::Key_Return 0x01000004 
Qt::Key_Enter 0x01000005 Typically located on the keypad. 

事情是這樣的:

void LineEdit::keyPressEvent(QKeyEvent *event) 
{ 
    if(event->key() == Qt::Key_Enter) 
    { 
     //do something 
    } 
} 

如果你不想子類,你可以installEventFilter到您的對話窗口,抓住你的lineEdit,並檢查被Qt::Key_Enter被按下。

bool MainWindow::eventFilter(QObject *obj, QEvent *event) 
{ 
     if (obj == ui->lineEdit && event->type() == QEvent::KeyPress) 
     { 
      QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); 
      if(Qt::Key_Enter == keyEvent->key()) 
      { 
       qDebug() << "numpad Enter pressed"; 
      } 
     } 
} 

不要忘記

protected: 
bool eventFilter(QObject *obj, QEvent *event);//in header 

qApp->installEventFilter(this);//in constructor 

例如:

void MainWindow::on_lineEdit_returnPressed() 
{ 
    qDebug() << "numpad Enter pressed"; 
} 
+0

謝謝您的解決方案。但我只是想知道,雖然文檔說,這個信號將被髮射回來和輸入密鑰,然後爲什麼它只適用於輸入密鑰。 – user1703942 2014-09-25 14:56:31

+0

@ user1703942在我的電腦上,它可以正常工作,抓住兩者,因此顯示您的代碼或使用我的解決方案 – Chernobyl 2014-09-25 15:01:11

+0

實際上沒有代碼可以顯示。因爲我正在使用Qt Creator,並且我在QLineEdit上單擊鼠標右鍵,選中「前往插槽」,然後選擇信號。並且插槽是自動創建的。但我認爲,如果我不能承認爲什麼,那麼我沒有任何選擇而不是使用你的解決方案。 – user1703942 2014-09-25 15:11:37

相關問題