我有这堂课:
class JavaScript : public QObject {
Q_OBJECT
public:
JavaScript();
bool executeFromFile(QString file);
bool enabled;
public slots:
void setEnabled( bool enabled );
bool isEnabled() const;
private:
QScriptEngine engine;
};
方法定义如下:
#include "javascript.h"
JavaScript::JavaScript() {
executeFromFile("test.js");
}
bool JavaScript::executeFromFile(QString file) {
QFile scriptFile(file);
if (!scriptFile.open(QIODevice::ReadOnly)) return false;
QTextStream stream(&scriptFile);
QString contents = stream.readAll();
scriptFile.close();
engine.evaluate(contents, file);
return true;
}
void JavaScript::setEnabled( bool enabled ) {
JavaScript::enabled = enabled;
}
bool JavaScript::isEnabled() const {
return enabled;
}
我正在尝试访问先前在头文件中定义的公共插槽,如文档所述:
http://doc.qt.digia.com/qt/scripting.html#making-ac-object-available-to-scripts-written-in-qtscript
test.js 文件看起来像这样,就像文档的示例一样:
var obj = new JavaScript();
obj.setEnabled( true );
print( "obj is enabled: " + obj.isEnabled() );
但我什么也得不到。它似乎没有找到 JavaScript 对象。我错过了什么?
做一个简单的
print(1+1)
工作得很好。
编辑: qt4 网页中的一个示例实现了Q_PROPERTY。我试过这个,但得到了相同的结果:
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
编辑1:尝试像这样实现初始化程序:
// javascript.h:
JavaScript(QObject *parent = 0);
// javascript.cpp:
JavaScript::JavaScript(QObject *parent) : QObject(parent) {}
依然没有...
编辑2:一些例子也继承自QScriptable
:
class JavaScript : public QObject, public QScriptable {}
但这也没有什么区别。