我有一个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()
调用函数,该函数返回添加项目的列表的副本。原始列表未修改。
如何保留对列表的更改?