2014-02-20 5 views
0

Я хочу получить доступ к объекту хранения внутри моего CoreProxy экземпляра из сценария, как показано ниже:QtScriptEngine: Доступ дочерний объект из объекта в скрипте

CoreProxy proxy(core); 
QScriptEngine engine; 
QScriptValue coreInScript = engine.newQObject(&proxy); 
engine.globalObject().setProperty("acq", coreInScript); 
engine.evaluate("acq.storage.start()"); 

Но QScriptEngine дает мне эту ошибку обратно:

TypeError: Result of expression 'acq.storage' [undefined] is not an object. 

Вот мой CoreProxy класс:

class CoreProxy : public QObject 
{ 
    Q_OBJECT 
private: 
    Core *_core; 

public: 
    CoreProxy(Core *core); 

    StorageProxy *storage; 

public slots: 
    // Public slots for javascript interactions 
    QString init(QString acqId); 
    QString start(); 
    QString stop(); 
}; 

И мой класс StorageProxy:

class StorageProxy : public QObject 
{ 
    Q_OBJECT 
private: 
    Core *_core; 

public: 
    StorageProxy(Core *core); 

public slots: 
    // Public slots for javascript interactions 
    QString start(); 
    QString stop(); 
}; 

Я добавил это в конструкторе StorageProxy, но я не смог получить доступ к элементу хранения:

this->setObjectName("storage"); 

ли что-то не хватает в моем коде?

ответ

0

Вы должны определить storage элемент как property:

Q_PROPERTY(StorageProxy* storage READ storage) 

Для получения дополнительной информации о том, что вы можете сделать с помощью этого макроса см The Property System. Я дал ссылки на Qt 4.8, поскольку вы используете Qt Script, который не активно развивается; см. документацию Scripting для получения дополнительной информации о том, что доступно с Qt 5.1.