私はQ_INVOKABLE
メソッドをC++クラスに持っています。このメソッドは、信号を使用せずに同じメソッド内でQMLにデータを返すようにします。QMLからC++へのデータを変更可能な参照として渡す方法
:
Q_INVOKABLE void select_company(int index,QString *out);
のように定義:私はこの出力を得る
var out_str;
data_model.select_company(index,out_str);
console.log(out_str);
:私はQMLでJavaScript関数からそれを呼び出す
void Companies::select_company(int index,QString *out) {
out->clear();
out->append("out string");
}
コンソールの場合:
qrc:/CompaniesList.qml:56: Error: Unknown method parameter type: QString*
(JavaScript)変数をQMLからC++メソッドに渡してC++にこの変数を変更させることはできますか?ポインタや参照を渡すことでそれを行うことができない場合は、これを行うための(最も単純な)他のアプローチは何ですか?
私がこれまでに発見した唯一の方法は、このように、それにQJSValue
と設定されたプロパティを渡すことです:
宣言:
Q_INVOKABLE void select_company(int index,QJSValue out);
定義:
void Companies::select_company(int index,QJSValue out) {
out.setProperty("company_name","Acme, Inc.");
out.setProperty("identity_id",29673);
}
QML:
var retval={};
data_model.select_company(index,retval);
console.log(retval.company_name);
console.log(retval.identity_id);
C++メソッドを呼び出してすぐにデータを返すすべての可能な方法を見つけるのは興味深いでしょう。
http://stackoverflow.com/questions/31618468/passing-a-javascript-callback-to-ac-invoked-method-in-qml – AlexanderVX
@AlexanderVX、そのコードには妥当性検証がありません。 jsCallback.isCallable()が呼び出された後でなければ、jsCallback.isCallable()をチェックしてください。しかし、私は関数を宣言したくないので、QtがC++側でJavaScriptの値を変更できるようにします。 – Nulik