私はこのクラスを持っています:
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 {}
しかし、それでも違いはありません。