有像样的脚本教程吗? P>有没有好的QTScript教程,不涉及时隙或从脚本访问C++值?我所需要的只是外部文件中的一个函数,它对数组值使用一些regexp,然后将输出发送回主程序

有像样的脚本教程吗? P>有没有好的QTScript教程,不涉及时隙或从脚本访问C++值?我所需要的只是外部文件中的一个函数,它对数组值使用一些regexp,然后将输出发送回主程序,qt,qtscript,Qt,Qtscript,我明白,可以使用信号/插槽来完成,但这看起来像是开销,而且我确信还有更简单的方法。听起来您想要做的是在定义函数(作为脚本文本传入)的文件上使用,然后使用调用它。不需要信号或插槽 大致如下(未经测试): QScriptEngine; //使用evaluate获取保存函数的QScript值 QScript值函数sv=engine.evaluate( “函数立方体(x){返回x*x*x;}” ); //构建一个QScript值类型的参数列表来代理C++ //键入脚本引擎可以理解的格式 QScriptV

我明白,可以使用信号/插槽来完成,但这看起来像是开销,而且我确信还有更简单的方法。

听起来您想要做的是在定义函数(作为脚本文本传入)的文件上使用,然后使用调用它。不需要信号或插槽

大致如下(未经测试):

QScriptEngine;
//使用evaluate获取保存函数的QScript值
QScript值函数sv=engine.evaluate(
“函数立方体(x){返回x*x*x;}”
);
//构建一个QScript值类型的参数列表来代理C++
//键入脚本引擎可以理解的格式
QScriptValueList argsSV;

argsSV听起来您想要做的是在定义函数(作为脚本文本传入)的文件上使用,然后使用调用它。不需要信号或插槽

大致如下(未经测试):

QScriptEngine;
//使用evaluate获取保存函数的QScript值
QScript值函数sv=engine.evaluate(
“函数立方体(x){返回x*x*x;}”
);
//构建一个QScript值类型的参数列表来代理C++
//键入脚本引擎可以理解的格式
QScriptValueList argsSV;

argsSV令人惊讶的是,像脚本这样一个中等复杂的问题竟然被专家们搞糊涂了,以至于没有人知道他们在做什么。所有成功的教学规则都被违反了,从用户提出的问题来看,结果是一场灾难

脚本是一种表示法,它意味着要执行的特定通信(在本例中为动作)。这个过程需要设计一个翻译词典,请注意,这永远不会完成,只有魔术才会发生,将脚本翻译成预定义的结果。然而,脚本引擎的任务始终是在脚本获得任何信息之前对其进行评估。这显示了白痴的教学


在展示脚本引擎评估任何脚本之前,必须向学生展示如何教引擎执行评估。在我回顾过的15个脚本示例中,没有一个是这样做的。所以,Qt脚本必须按照您的定义执行魔术。除了心灵感应之外,没有其他的可能性。你把自己置身于一个令人讨厌的盒子里,所以我希望你知道现在会发生什么。

令人惊讶的是,像脚本这样一个中等复杂的问题竟然被专家们搞糊涂了,以至于没有人知道他们在做什么。所有成功的教学规则都被违反了,从用户提出的问题来看,结果是一场灾难

脚本是一种表示法,它意味着要执行的特定通信(在本例中为动作)。这个过程需要设计一个翻译词典,请注意,这永远不会完成,只有魔术才会发生,将脚本翻译成预定义的结果。然而,脚本引擎的任务始终是在脚本获得任何信息之前对其进行评估。这显示了白痴的教学

在展示脚本引擎评估任何脚本之前,必须向学生展示如何教引擎执行评估。在我回顾过的15个脚本示例中,没有一个是这样做的。所以,Qt脚本必须按照您的定义执行魔术。除了心灵感应之外,没有其他的可能性。你把自己放进了一个肮脏的盒子里,所以我希望你知道现在会发生什么

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...)
}