Матчасть: QtScript Module, Qt Script: Language Reference
Quick start поможет статья On the Fast Track to Application Scripting на crossplatform.ru.
Рассмотрим пример получения значений скрипт объекта.
Объект создан примерно следующим образом:
QScriptEngine engine;
QScriptValue scriptValue = engine.evaluate("Object({name:'myName', visible:true, size:100})");
Чтобы получить все свойства объекта необходимо выполнить что-то типа javascript
for(var name in scriptValue){
var value = scriptValue[name];
}
этот код на C++/QT будет выглядеть как:if (scriptValue.isObject()){
QScriptValueIterator it(scriptValue);
while (it.hasNext()) {
it.next();
QString name = it.name();
QVariant value = scriptValue.property(name).toVariant();
}
Для того, чтобы проставить эти значения некоторому QObject'у, необходимо:
- класс следовал Qt's Property System - были продекларированы соответствующие Q_PROPERTY
class SomeInfo : public QObject{
Q_OBJECT
Q_PROPERTY(bool visible READ isVisible WRITE setVisible)
Q_PROPERTY(QString name READ getName WRITE setName)
Q_PROPERTY(int size READ getSize WRITE setSize)
public:
const bool &isVisible() const;
void setVisible(const bool visible);
const QString &getName() const;
void setName(const QString name);
int getSize() const;
void setSize(const int size);
};
В таком случае для SomeInfo вызывать метод QObject'а setProperty:
SomeInfo *info;
// ...
if (scriptValue.isObject()){
QScriptValueIterator it(scriptValue);
while (it.hasNext()) {
it.next();
QString name = it.name();
QVariant value = scriptValue.property(name).toVariant();
info->setProperty(name.toUtf8().data(), value);
}
Преобразование из QVariant в требуемый тип (для данного примера: size типа int, visible типа bool и т.п) будет произведено автоматически.
Установление свойства объекта, которое у него отсутствует (например, свойство qqq для класса SomeInfo) - не вызовет ошибки.
Комментариев нет:
Отправить комментарий