У меня есть класс QObject
, который выглядит следующим образом:
class TestObject : public QObject
{
Q_OBJECT
Q_PROPERTY(QStringList contents READ contents WRITE setContents)
public:
QStringList contents() { return m_contents; }
void setContents(QStringList contents) { m_contents = contents; }
private:
QStringList m_contents;
};
Класс содержит одно свойство, представляющее собой список из QString
s.Если я хочу представить экземпляр этого класса сценарию, я могу сделать это следующим образом:
// Instance
TestObject test_instance;
// Expose it to the script engine
QScriptEngine script_engine;
QScriptValue val;
val = script_engine.newQObject(&test_instance);
engine.globalObject().setProperty("TestObject", val);
Однако, когда я иду, чтобы добавить строку в список в коде Javascript, он не 'Фактически добавьте строку:
TestObject.contents.push("Test string!");
print(TestObject.contents.length);
Вывод вышеупомянутого - 0
, указывая, что строка была не добавлена в список.При внимательном рассмотрении сгенерированного MOC-кода выясняется, что при обращении к свойству contents
вызывается только функция contents()
, которая возвращает копию списка, в который добавлен элемент.Исходный список не изменен.
Как сохранить изменения в списке?