使用Qt Script实现多项式计算

在测试系统开发过程中遇到需要对测试结果进行多项式运算的需求,如测试结果为 R1R2...Rn
而最终结果需要导出如 Max(R1,R2)+Abs(R3)-Min(R4) 这种,并且计算多项式为用户指定。

使用Qt Script可以很方便的实现这个需求,首先使用js脚本实现多项式计算中所需的内置函数

function Max(x,y){
    return (x>y)?x:y;
}

function Min(x,y){
    return (x<y)?x:y;
}

function Abs(x){
    return (x<0)?(-1*x):x;
}

然后可通过

    // 若要添加内置函数,可通过修改 MyScript.js 文件实现
    QFile file(":/MyScript.js");
    if(file.open(QIODevice::ReadOnly|QIODevice::Text))
    {
        m_strScript = file.readAll();
        file.close();
    }

    // 替换多项式中的 X1~Xn   Abs(X1) --> Abs(-10)
    QString strEqution = m_qsEqution;
    QMap<QString, double>::iterator iter = dDataMap.begin();
    while (iter != dDataMap.end())
    {
        strEqution = strEqution.replace(iter.key(), QString::number(iter.value()));
        iter++;
    }

    // 多项式前添加函数定义
    QString jsText = m_strScript + strEqution;

    // 使用js引擎,计算多项式结果
    QScriptEngine scriptEngin;
    if(scriptEngin.canEvaluate(jsText))
    {
        QScriptValue scripVal = scriptEngin.evaluate(jsText).toString();

        m_dResult = scripVal.toNumber();
        m_bPass = ((m_dResult > m_rgdLimit[0])&&(m_dResult < m_rgdLimit[1]));
    }
    else
    {
        m_bPass = false;

        return false;
    }
posted @ 2022-03-26 08:55  mr-xbt  阅读(171)  评论(0编辑  收藏  举报