Я попытаюсь использовать QScriptEngine для записи функции в Read Array и записи массива для изменения 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..
Есть идеи?
спасибо