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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值