首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QScriptEngine在arg中传递QByteArray

使用QScriptEngine在arg中传递QByteArray
EN

Stack Overflow用户
提问于 2019-03-14 20:34:33
回答 1查看 142关注 0票数 0

我会试着用QScriptEngine写函数来读数组,写数组来改变Trame,例如和qtscript用户。我已经阅读了很多文档。

我将尝试这样做:目前,我的软件中有QByteArray,通过脚本检查trameProtocol。

代码语言:javascript
复制
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自定义类

或者我有自动转换不工作?

其他测试:

代码语言:javascript
复制
"( \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:

代码语言:javascript
复制
  "(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)

代码语言:javascript
复制
 "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..

有什么想法吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-03-14 20:50:16

如果我在arg //中注册pTrame是正常的,并且不使用该脚本:

代码语言:javascript
复制
 "(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)))

有没有办法做得更好?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55162677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档