QT中QLineEdit的editingFinished()信號在按下回車(enter)時會觸發兩次的解決辦法

原文鏈接:https://blog.csdn.net/u012784814/article/details/52939381

之所以會進兩次槽函數,是因爲響應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的焦點離開事件。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章