2013-01-15 95 views
0

訪問公共插槽我有這個類:無法從QtScript

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-a-c-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網頁的example實現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 {} 

但這也沒有區別。

回答

0

您需要創建QScriptClass而不是QObject。 Qt包含了如何在Qt中擴展腳本功能的例子。採取Custom Script Class Example

+0

看看我無法創建QScripClass:**錯誤:類型QScriptClass「不是「的JavaScript」 ** – jviotti

+0

你看了例子的直接基礎? –

+0

示例鏈接已死亡 - 您的意思是這個示例 - http://qt-project.org/doc/qt-4.8/script-customclass.html? –