之所以會進兩次槽函數,是因爲響應enter鍵一次,以及焦點離開時又一次,
不過兩次進入時狀態是不一樣的,一次焦點還在QLineEdit上,一次已經不在了。
解決方法有:
1、通過判斷焦點是否還在QLineEdit上加以區分
/*
添加QLineEdit的槽editingFinished
當回車按下時
editingFinished()槽第一次響應enter鍵,此時焦點在QLineEdit上,響應完失去焦點
第二次響應焦點離開事件,此時焦點已經不在QLineEdit上
故通過
if(ui->confirmPwdLineEdit->hasFocus())
{
}
來判斷是否失去焦點
這裏屏蔽第二次失去焦點的事件
將焦點改變要做的事件放到
mousePressEvent(QMouseEvent *e)中來實現
這樣回車和失去焦點都可以響應,且不會同時響應
*/
void addUserDialog::on_confirmPwdLineEdit_editingFinished()
{
//此處判斷如果焦點存在,執行(響應enter,屏蔽失去焦點事件)
if(ui->confirmPwdLineEdit->hasFocus())
{
}
}
void addUserDialog::mousePressEvent(QMouseEvent *e)
{
//失去焦點時的事件處理
QDialog::mousePressEvent(e);
}
2、重寫QLineEdit的焦點離開事件。