0

我有这堂课:

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 {}

但这也没有什么区别。

4

1 回答 1

0

您需要创建 QScriptClass 而不是 QObject。Qt 包含如何在 Qt 中扩展脚本功能的示例。看看自定义脚本类示例

于 2013-01-16T10:51:24.873 回答