QtScriptEngine:从脚本中的对象访问子对象

时间:2014-02-20 18:23:03

标签: c++ qt qtscript qt5.1

我想从脚本中访问我的CoreProxy实例中的存储对象,如下所示:

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");

我的代码中缺少什么?

1 个答案:

答案 0 :(得分:0)

您需要将storage成员定义为property

Q_PROPERTY(StorageProxy* storage READ storage)

有关您可以对此宏执行的操作的详细信息,请参阅The Property System。当你使用Qt脚本时,我已经给出了Qt 4.8文档的链接,这是没有积极开发的;有关Qt 5.1可用内容的更多信息,请参阅Scripting文档。