?QLineEdit中editingFinished槽函數會在按下enter時響應兩次,分別是按下enter和失去焦點的時候,為了能讓?QLineEdit只響應其中一次,需定義一個全局變量m_bFlagEnter保存是否enter是否按下,按下后,則在失去焦點的時候做對應判斷,為ture則將m_bFlagEnter復位。為false則說明當前編輯框只是失去了焦點,執行需要做的動作即可。
注意點:當QLineEdit只是失去焦點,當第一次失去焦點時可以響應editingFinished槽函數,但如果這個編輯框中的數據沒有做任何變化,則下次失去焦點時,不會響應editingFinished槽函數,這點在官方說明里面沒有提及,只有自己測試能發現。只有數據變化了,當失去焦點的時候才能響應editingFinished槽函數
代碼如下:
//遍歷編輯框,鏈接同一個槽函數for each (auto var in ui->tab_MachineParams->findChildren<QLineEdit*>()){connect(var, &QLineEdit::editingFinished, this, &qwaGrindProcessFive::slotLineEditFinished);}
void qwaGrindProcessFive::slotLineEditFinished()
{//響應編輯框完成QLineEdit* lineEdit = (QLineEdit*)this->sender();qDebug() << lineEdit->objectName();//讓finish只響應一次就夠了,回車或者失去焦點if (lineEdit->hasFocus()){m_bFlagEnter = true;//按了回車鍵LineEditFinishedAction(lineEdit);}else{if (!m_bFlagEnter){//失去焦點時LineEditFinishedAction(lineEdit);}else{m_bFlagEnter = false;}}
}//編輯框完成時的具體動作
void qwaGrindProcessFive::LineEditFinishedAction(QLineEdit* lineEdit)
{//響應編輯框完成if (lineEdit == ui->lineEdit_BaseDistanceX){}else if (lineEdit == ui->lineEdit_BaseDistanceY){}else if (lineEdit == ui->lineEdit_BaseDistanceZ){}}