【问题标题】:passing QByteArray in arg with QScriptEngine使用 QScriptEngine 在 arg 中传递 QByteArray
【发布时间】:2019-08-05 08:34:21
【问题描述】:

我将尝试使用 QScriptEngine 编写函数来读取数组并写入数组以更改 Trame,例如使用 qtscript 用户。 我已经阅读了很多文档。

我会试试这个: 目前,我的软件中有 QByteArray,可以通过脚本检查trameProtocol。

QByteArray l_ByteArray ="01";
QVariant l_varByteArray = l_ByteArray;
QScriptValue l_var = m_engine.newVariant(l_varByteArray);
QScriptValue m_fct_checksum = m_engine.evaluate("( \n function cal_crc(pTrame) \n { return pTrame[0]; \n } \n)");
qDebug() << m_fct_checksum.call(QScriptValue(),l_var).toInteger();
/* works  can read if i return element of array, but not can t modify by script , not have properti length in script not work
if call with newArray(), not have to access to property length */

我不明白我会写这样的自定义类 https://doc.qt.io/archives/qt-4.8/qt-script-customclass-example.html

或者我的自动转换不起作用?

其他测试:

"( \n function cal_crc(pTrame) \n { return pTrame.length; \n } \n)"

QScriptValue l_var = m_engine.newArray(2);
l_var.setProperty( 0,QScriptValue('0') );
l_var.setProperty( 1,QScriptValue('1') );
qDebug() << l_var.toVariant();
qDebug() << m_fct_checksum.call(QScriptValue(),l_var).toInteger();

//console
QVariant(QVariantList, (QVariant(int, 48), QVariant(int, 49)))
0
like writing previously, don't modify pTrame in script
    ("(function cal_crc(pTrame){pTrame[0]=5;return pTrame[0];})");
   //same result
   QVariant(QVariantList, (QVariant(int, 48), QVariant(int, 49)))
    0 //not 5

如果我在脚本中返回 pTrame:

  "(function cal_crc(pTrame){pTrame[0]=5;return pTrame;})"
   qDebug() << m_fct_checksum.call(QScriptValue(),l_var).toVariant();
   QVariant(QVariantList, (QVariant(int, 48), QVariant(int, 49)))
    QVariant(int, 48)

 "function cal_crc(pTrame){return pTrame})"
  QVariant(QVariantList, (QVariant(int, 48), QVariant(int, 49)))
  QVariant(int, 48)
//return only the first,, it's strange because en i work in arg but not in return and can't modify i repeat..

有什么想法吗?

谢谢

【问题讨论】:

    标签: function eval qbytearray qtscript


    【解决方案1】:

    如果我注册 pTrame 没问题并且不在 a​​rg 中使用 //使用这个脚本:

     "(function(){pTrame[0]=5;return pTrame})"
    
    QScriptValue l_var = m_engine.newArray(2);
      l_var.setProperty( 0,QScriptValue('0') );
      l_var.setProperty( 1,QScriptValue('1') );
     m_engine.globalObject().setProperty("pTrame", l_var);
    
    
    //console
    QVariant(QVariantList, (QVariant(int, 48), QVariant(int, 49)))
    QVariant(QVariantList, (QVariant(int, 5), QVariant(int, 49)))
    

    有什么好办法吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      相关资源
      最近更新 更多