QLineEdit响应editingFinished实现只响应一次

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

你可能感兴趣的:(QT,c++,qt)