Я хочу получить доступ к объекту хранения внутри моего экземпляра 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");
Что-то не хватает в моем коде?
Вы должны определить элемент storage
как свойство:
Q_PROPERTY(StorageProxy* storage READ storage)
Дополнительные сведения о том, что вы можете сделать с этим макросом, см. В разделе "Система свойств". Я дал ссылки на Qt 4.8, поскольку вы используете Qt Script, который не активно развивается; см. документацию Scripting для получения дополнительной информации о том, что доступно с Qt 5.1.