任何体面的QtScript教程?

时间:2010-01-05 22:02:51

标签: qt qtscript

有没有关于插槽或从脚本访问c ++值的QtScript教程?我需要的只是外部文件中的一个函数,它对数组值使用一些正则表达式,然后将输出发送回主程序。

据我所知,它可以使用信号/插槽完成,但它看起来像开销,我确信有更简单的方法。

2 个答案:

答案 0 :(得分:3)

听起来你想要做的就是在定义函数的文件上使用QScriptEngine::evaluate()(以脚本文本形式传入),然后使用QScriptEngine::call()调用它。没有必要的信号或插槽。

这些方面的东西(未经测试):

QScriptEngine engine;

// Use evaluate to get a QScriptValue that holds the function
QScriptValue functionSV = engine.evaluate(
    "function cube(x) { return x * x * x; }"
);

// Build an argument list of QScriptValue types to proxy the C++
// types into a format that the script engine can understand
QScriptValueList argsSV;
argsSV << 3;

// Make an empty script value for "this" object when we invoke
// cube(), since it's a global function
QScriptValue thisSV ();

// Call the function, getting back a ScriptValue
QScriptValue resultSV = functionSV.call(thisSV, argsSV);

if (engine.hasUncaughtException() || !resultSV.isNumber()) {
    // The code had an uncaught exception or didn't return
    // the type you were expecting.

    // (...error handling...)

} else {
    // Convert the result to a C++ type
    int result = resultSv.toInt();

    // (...do whatever you want to do w/the result...)
}

请注意,您需要做很多来回转换。如果你只想在Qt中使用正则表达式,它们已经存在:QRegExp。样本中包含一个演示:

http://doc.trolltech.com/4.2/tools-regexp.html

答案 1 :(得分:0)

令人惊讶的是,如此专业的脚本编写这样一个中等复杂的问题,以至于没有其他人理解他们想要做的事情。所有成功的教学规则都受到了侵犯,结果是由来自这里的用户提出的问题判断的灾难。

脚本是一种表示形式,表示特定通信,在这种情况下,是要执行的操作。该过程要求设计翻译词典,注意这是永远不会做的,只有魔术应该发生,将脚本翻译成预定义的结果。然而,脚本引擎总是负责在脚本有任何信息之前评估脚本。这显示了蠢货的教学。

在您展示评估任何脚本的脚本引擎之前,必须向学生展示如何教导引擎执行评估。在我查看的十五个脚本示例中,从未进行过任何操作。因此,Qt Script必须按照您的定义执行魔术。除了精神心灵感应之外没有其他可能性。你把自己置于一个讨厌的盒子里,所以我希望你现在知道你的目标是什么。