次のような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;
};
クラスには、 のリストである 1 つのプロパティが含まれますQString
。このクラスのインスタンスをスクリプトに公開する場合は、次のようにします。
// 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()
すると、項目が追加されたリストのコピーを返す関数のみが呼び出されることがわかります。元のリストは変更されていません。
リストへの変更を永続化するにはどうすればよいですか?