- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
解决方案可能很简单。话又说回来,这可能是不可能的。
我有基础回调类:
class CFCallback {
int command_;
int transfer_rate_;
public:
CFCallback(int command, int transfer_rate = 0) {
command_ = command; transfer_rate_ = transfer_rate; }
virtual ~CFCallback() {}
virtual void operator()(void *data) = 0;
int GetCommand() { return command_; }
int GetTransferRate() { return transfer_rate_; }
};
下面是从 CFCallback
派生的一个示例:
void CFPacketVersion::InitiateVersion() {
class InitiateVersionCB : public CFCallback {
CFPacketVersion *visitor_;
public:
InitiateVersionCB(CFPacketVersion *v, int command) :
CFCallback(command) {
visitor_ = v;
}
void operator()(void *data) {
Packet *pkt = (Packet *)data;
unsigned char *pkt_data = pkt->GetData();
std::string version = "";
for(unsigned int i = 0; i < pkt->GetDataLength(); i++ )
version+= pkt_data[i];
delete []pkt_data;
boost::regex rex("CFA(.*?):h(.*?),v(.*?)$");
boost::smatch what;
if( boost::regex_match(version, what, rex) ) {
if(visitor_->GetModel()->GetName() != what[1].str() )
LCDInfo("Crystalfontz: Model mismatch");
visitor_->SetHardwareVersion(what[2]);
visitor_->SetFirmwareVersion(what[3]);
}
}
};
GetVersion(new InitiateVersionCB(this, 1));
}
GetVersion(CFCallback *)
提供给脚本引擎。
我希望能够做与 InitiateVersion
中看到的相同的事情,但在 javascript 方面。这可能吗?
我知道我需要为 CFCallback
注册元类型信息。但我不知道是否可以使用指向 CFCallback
的指针。我最初尝试的方法没有用。
此外,由于 CFCallback
是一个仿函数,我不确定如何将其转换为 javascript。我想我可以使 CFCallback
成为 QObject
并提供从 operator()
发出的信号。如果您有任何提示,请分享。
最佳答案
恐怕它不会按照您设置的方式工作。
如果您希望能够在 javascript 中创建回调,您需要一个具有可访问的 GetVersion(QScriptValue) 的 QObject,脚本将使用它来传递基于脚本的回调实现。但请注意,回调将无法处理未类型化 (void*) 数据 - 您需要传递有效的 QtScript 对象或具有适当接口(interface)的 QObject(例如示例中的 Packet one!)
然后你可以像这样把它包起来:
Qt脚本:
function mycb(packet) {
var pkt_data = packet.getData(); // pkt_data is probably a String or custom object with proper interface so to simplify things get the version as string
var version = pkt_data.toString();
pkt_data.release(); // to simulate delete [] pkt_data; this is part of custom interface
// proceed further with the regex checks
}
GetVersion(mycb); // implies that you define the GetVersion() as a property of the global object
C++:
QScriptValue getVersion(QScriptContext *ctx, QScriptEngine *engine)
{
void *data = ...;
Packet pkt_data = wrapPacketData(data);
// Packet is interface registered with QtScript or inherits QObject
// it has methods getData(), toString() and release()
QScriptValueList args;
QScriptValue pkt_data_param = engine->newQObject(&pkt_data);
args << pkt_data_param;
QScriptValue cb = ctx->argument(0);
Q_ASSERT(cb.isFunction()); // we expect a function object!
cb.call(QScriptValue(), args);
}
QScriptValue getVersionFun = engine->newFunction(getVersion);
engine->globalObject().setProperty(QLatin1String("GetVersion"), getVersionFun);
关于c++ - QtScript——通过 C++ 端实现的脚本端回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1712411/
现在我可以使用 QScriptEngine 来加载和执行 test.js 文件。在那个 test.js 的函数之一中,我想调用位于另一个 .js 文件中的另一个函数。我该怎么做? 最佳答案 要从多个文
QScriptEngine有evaluate()方法,可用于加载脚本、执行脚本以及从已加载的脚本运行指定的函数。但是如何清除当前脚本并加载新脚本呢?例如,我使用评估()从文件加载脚本,然后使用评估()
我正在使用 Qt5,并尝试学习如何使应用程序可编写脚本。 为此,我创建了一个包含一些文本编辑、标签等的主窗口。然后我添加了一个名为“脚本控制台”的选项”到该表单的菜单,以便我打开第二个表单,其中仅包含
我想从 QtScript 脚本运行多个并发作业: function job1() { ... } function job2() { ... } runConcurrentJobs(job1, job
当我调用这段代码时: QScriptEngine e; e.evaluate("print('hello, world!')"); 输出文本(来自 print 方法)被写入主应用程序的终端。 有什么方
我知道有一些工具可以分析纯 javascript 代码,例如 firebug 和 Chrome 的开发者工具,但我想知道是否有任何好的工具来分析 QTScript。或者我如何使用这些工具来分析 QtS
问题 我正在制作一个使用 Q_OBJECT 和 Q_PROPERTY 从脚本访问一些对象的项目。我有两个问题: 使使用前向声明的类可编写脚本 返回一个属性作为指针 说明 1. 为什么要提前申报? 类
解决方案可能很简单。话又说回来,这可能是不可能的。 我有基础回调类: class CFCallback { int command_; int transfer_rate_;
我遇到了以下错误 "TypeError: cannot call sayHello(): argument 2 has unknown type `QString&' (register the ty
我必须在 C++ 应用程序中运行一系列 javascript“脚本”。其中大部分是重复 Action 。代码示例 here . 我知道 Qt,因为第 5 版包含 2 个 javascript 引擎:Q
QtScript 是否支持内省(introspection)/反射(例如,像 python 的 dir() 一样),使我能够通过在运行时探索对象模型来从内部“映射”API? 最佳答案 你真的应该更多地
我正在学习 QtScript 并写了几个简单的例子。如果我将参数限制为简单类型,则映射很简单。 我现在希望能够将可变数量的参数从 QtScript 传递到 C++ 类,例如 Myobject.add(
函数 qScriptValueFromSequence 允许我从 QObjectList 在 QtScript 中创建一个数组,当我在脚本中修改 QObject 属性时,QObject 属性会发生变化
我通过创建派生的 QThread 类使我的应用程序可编写脚本,我在其中添加多个 QObject 类以便通过命令行访问它们的功能。 void commandLine::addObject(QObject
我已经编写了一个自定义类,它可以通过原型(prototype)在 QtScript 中使用。还有另一个全局类可用,它应该用于打印在 QtScript 中生成的自定义类。 这是我的自定义类(非常简单;)
有谁知道是否有可能拥有一个带有重载运算符(如 +、-、*)的 C++ 类,并以某种方式(这就是魔法发生的地方)向 QtScriptEngine 声明它,以便像 "a+b 这样的 js 表达式"是否像在
我在我的应用程序中使用 Qt 脚本引擎作为用户访问其功能的替代方式。因此,我将一些 C++ 类导出到 Qt ScriptEngine,它将作为应用程序的接口(interface)。问题是,这些 C++
我正在使用 QtScript 来自动化我的应用程序的某些部分以用于开发和测试目的。我已经到了要测试断言的地步,并且基于 "standalone assertion libraries?"以及我在 De
我试图找出如何在 QtScript 中使用复数,以便可以从 QtScript 调用用复数参数定义的槽。用户还应该可以从脚本访问复数的基本代数(+、-、exp、...)。 只是为了说明,我想调用的是:
我已经在 Windows 下为 64 位架构编译了 Qt,除了 QtScript 之外,其他都运行良好。以下简单代码,与 32 位 Qt for Windows 完美配合,如果使用 64 位 Qt 编
我是一名优秀的程序员,十分优秀!