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){}}