我可以简化qt的以下代码吗?

时间:2016-04-18 23:46:12

标签: c++ string qt

我需要简化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));

}

代码与lineEdit5lineEdit6lineEdit7等非常相似,这是多余的。有没有更好的方法来消除冗余?

1 个答案:

答案 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原则被违反等等,而在某些情况下该功能仍然有用。