Раскрывающийся текст
H
CPP
Раскрывающийся текст
// Узел
class Osm : public QObject
{
Q_OBJECT
public:
typedef QMap<QString,QVariant> map;
map m_nodes;
Q_PROPERTY(QMap nodes READ getNodes WRITE setNodes)
map getNodes() const
{
return m_nodes;
}
void setNodes(map value)
{
m_nodes = value;
}
//
QString m_testID;
//Q_PROPERTY(QString testID READ getTestID WRITE setTestID)
Q_PROPERTY(QString testID READ getTestID)
QString getTestID()
{
return m_testID;
}
void setTestID(QString value)
{
m_testID = value;
}
public:
// Конструктор
Osm(QObject *parent=0);
// Деструктор
virtual ~Osm();
// Инициализация скриптового движка
static void add(QScriptEngine &engine);
};
CPP
Раскрывающийся текст
QScriptValue OsmScriptConstructor(QScriptContext *context,
QScriptEngine *engine)
{
QObject *parent = context->argument(0).toQObject();
Osm *object = new Osm(parent);
//-->> Для теста присваиваю эти значения
object->m_nodes["1111"] = "aaaa";
object->m_nodes["22222"] = "bbbb";
//<<--
return engine->newQObject(object, QScriptEngine::ScriptOwnership,QScriptEngine::ExcludeSuperClassMethods | QScriptEngine::ExcludeSuperClassProperties);
}
// Конструктор
Osm::Osm(QObject *parent) : m_testID("oVo")
{
qDebug() << "constructor osm::Osm()";
}
Osm::~Osm()
{
qDebug() << "destructor osm::Osm()";
}
// Инициализация скриптового движка
void Osm::add(QScriptEngine &engine)
{
//QScriptValue classOsm = engine.scriptValueFromQMetaObject<Osm>();
QScriptValue ctor = engine.newFunction(OsmScriptConstructor);
QScriptValue classOsm = engine.newQMetaObject(&QObject::staticMetaObject, ctor);
engine.globalObject().setProperty("Osm", classOsm);
}
Выполняю такой скрипт
var obj = new Osm()
obj.nodes["333"] = "cccc"
for(var name in obj.nodes)
print(name,obj.nodes[name])
получаю следующий результат:
Цитата
1111 aaaa
22222 bbbb
22222 bbbb
Т.е. в сишном коде значения устанавливаются и в скрипте они видны. Но в самом скрипте свойства не устанавливаются. Может кто сталкивался и знает ответ?