子類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";
}
謝謝您的解決方案。但我只是想知道,雖然文檔說,這個信號將被髮射回來和輸入密鑰,然後爲什麼它只適用於輸入密鑰。 – user1703942 2014-09-25 14:56:31
@ user1703942在我的電腦上,它可以正常工作,抓住兩者,因此顯示您的代碼或使用我的解決方案 – Chernobyl 2014-09-25 15:01:11
實際上沒有代碼可以顯示。因爲我正在使用Qt Creator,並且我在QLineEdit上單擊鼠標右鍵,選中「前往插槽」,然後選擇信號。並且插槽是自動創建的。但我認爲,如果我不能承認爲什麼,那麼我沒有任何選擇而不是使用你的解決方案。 – user1703942 2014-09-25 15:11:37