qtScript 上 JavaScript 的 setTimeout 等价于什么?

2023-11-27

没什么可补充的; qtScript 上 JavaScript 的 setTimeout 的等价物是什么?


以下是如何通过提供独立的 C++ 方法来扩展脚本语言(无需记录计时器 ID 等)。只需创建以下名为“setTimeout”的槽:

void ScriptGlobalObject::setTimeout(QScriptValue fn, int milliseconds)
{
  if (fn.isFunction())
  {
    QTimer *timer = new QTimer(0);
    qScriptConnect(timer, SIGNAL(timeout()), QScriptValue(), fn);
    connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater()));
    timer->setSingleShot(true);
    timer->start(milliseconds);
  } else
    context()->throwError(tr("Passed parameter '%1' is not a function.").arg(fn.toString()));
}

并将该槽作为函数引入到脚本引擎的全局对象中。这可以通过不同的方式来完成,例如只需通过 QScriptEngine 实例创建一个 QScriptValue 函数,并在引擎的现有全局对象上设置相应命名的属性。然而,就我而言,整个 ScriptGlobalObject 实例被设置为新的全局对象,如下所示:

mScriptGlobalObject = new ScriptGlobalObject(this);
engine->setGlobalObject(engine->newQObject(mScriptGlobalObject));

请注意,如果您想使用上面 setTimeout 代码中所示的“context()”,您的 ScriptGlobalObject 也应该从 QScriptable 派生,如下所示:

class ScriptGlobalObject : public QObject, protected QScriptable

在脚本中,您现在可以使用 setTimeout 稍后调用一个方法(只要同时不删除它所源自的 QScriptEngine 实例):

setTimeout(function() {
  // do something in three seconds
}, 3000);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qtScript 上 JavaScript 的 setTimeout 等价于什么? 的相关文章

随机推荐