I have a QObject
-derived class that looks like this:
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;
};
The class contains one property that is a list of QString
s. If I want to expose an instance of this class to a script, I can do so with the following:
// 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);
However, when I go to add a string to the list in Javascript code, it doesn't actually add the string:
TestObject.contents.push("Test string!");
print(TestObject.contents.length);
The output of the above is 0
, indicating that the string was not added to the list. Close examination of the MOC-generated code reveals that when the property contents
is accessed, only the contents()
function is called, which returns a copy of the list to which the item is added. The original list is unmodified.
How can I have the changes to the list be persisted?