QtScriptEngine: доступ к дочернему объекту из объекта в скрипте

0

Я хочу получить доступ к объекту хранения внутри моего экземпляра 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");

Что-то не хватает в моем коде?

Теги:
qt
qtscript
qt5.1

1 ответ

0
Лучший ответ

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

Q_PROPERTY(StorageProxy* storage READ storage)

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню