Can’;无法从QtScript访问公共插槽
我有这门课:Can’;无法从QtScript访问公共插槽,qt,qt4,qtscript,Qt,Qt4,Qtscript,我有这门课: class JavaScript : public QObject { Q_OBJECT public: JavaScript(); bool executeFromFile(QString file); bool enabled; public slots: void setEnabled( bool enabled ); bool isEnabl
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;
}
// javascript.h:
JavaScript(QObject *parent = 0);
// javascript.cpp:
JavaScript::JavaScript(QObject *parent) : QObject(parent) {}
我试图访问先前在头文件中定义的公共插槽,如文档所示:
test.js文件如下所示,如文档示例所示:
var obj = new JavaScript();
obj.setEnabled( true );
print( "obj is enabled: " + obj.isEnabled() );
但我什么也没得到。似乎找不到JavaScript对象。我错过了什么
做一个简单的
print(1+1)
很好用
编辑:qt4网页中的An实现Q_属性。我尝试了这个,但得到了同样的结果:
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
编辑1:尝试实现如下初始值设定项:
#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;
}
// javascript.h:
JavaScript(QObject *parent = 0);
// javascript.cpp:
JavaScript::JavaScript(QObject *parent) : QObject(parent) {}
还是没什么
编辑2:一些示例也继承自QScriptable
:
class JavaScript : public QObject, public QScriptable {}
但这也没什么区别。您需要创建QScript类而不是QObject。Qt包含如何在Qt中扩展脚本功能的示例。看看我无法创建QScripClass:*错误:类型“QScriptClass”不是“JavaScript”的直接基**示例链接已失效-你是说这个示例-?