我需要简化qlineedit
上的验证,它会在我输入时调用一个返回大写字母的函数。我有这个:
void dg_cliente::on_lineEdit_4_textChanged(const QString &arg1)
{
Cls_Validaciones *Valido = new Cls_Validaciones;
ui->lineEdit_4->setText(Valido->Validar_Mayuscula(arg1));
}
代码与lineEdit5
,lineEdit6
,lineEdit7
等非常相似,这是多余的。有没有更好的方法来消除冗余?
答案 0 :(得分:1)
我将您的问题解释为:
如何识别哪个小部件是实际的信号发送者?
通过调用广告位中的sender()功能。
void DlgClient::onLineEditTextChanged(const QString &arg1)
{
QLineEdit* pLineEditSender = qobject_cast<QLineEdit*>( sender() );
if (pLineEditSender) // also verify that is required type of sender
{
// FYI: setText also signals textChanged
// make sure the code is not looping here
// so bool m_forcedSetText initially set false
if ( ! m_forcedSetText)
{
m_forcedSetText = true;
pLineEditSender->setText( myTransform(arg1) );
}
else
m_forcedSetText = false;
}
}
P.S。也许评论中建议的其他类型的解决方案更好?但答案清楚地表明了你的要求。 sender()上的信息确实警告模块化的OOP原则被违反等等,而在某些情况下该功能仍然有用。