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)

うまく動作します。

編集: qt4Webページの例は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

QObject の代わりに QScriptClass を作成する必要があります。Qt には、Qt でスクリプト機能を拡張する方法の例が含まれています。カスタムスクリプトクラスの例を見てください

于 2013-01-16T10:51:24.873 に答える