2016-11-06 6 views
0

QScriptEngine을 만들고 js 스크립트에서 호출 할 수있는 객체 함수를 노출했습니다.Qt : 배열이나 사전은 qscriptengine에서 어떻게 전달됩니까?

engine->globalObject().setProperty("obj", myObj); 

myObj로는

obj.doSomething(5, 9); 

이는 작동 ...

void MyObject::doSomething(int w, int h) { 
    ... 
} 

내 JS 코드에서

, 내가 좋아하는 호출 할 수 있습니다 ... 같은 기능을 가지고있는 QObject입니다 그럴 것이라고 기대하지만 배열이나 사전을 이러한 함수에 전달할 때 어떤 문서도 찾을 수 없습니다. 내가 배열을 전달하고 싶었 예를 들어, 나는 C++ 함수를 정의 얼마나 그래서 ... 이런 식으로 뭔가를 할 수

obj.doSomething([1,2,3], "foo"); 

것이라고 할 수 뭔가 같은 ...

void MyObject::doSomething(QVector<QVariant> firstArg, QString secondArg); 

그것이 작동하지 않을 때 그것을 해결하는 것은 어렵습니다. 호출은 조용히 실패하는 것처럼 보입니다. 배열

+0

QVariantList를 사용해 보셨습니까? – jpnurmi

답변

1

는 스크립트 엔진과 C++ 시퀀스 컨테이너를 등록 두 가지 옵션

  1. 을 가지고 qScriptRegisterSequenceMetaType()를 참조하십시오. 이 함수의 문서에는 int 벡터에 대한 예제가 있습니다.

  2. 함수의 인수로 QScriptValue을 사용하십시오. 건네받은 객체는이 배열 (QScriptValue::isArray()) 인 경우 확인하고 또한 사전 (자바 스크립트에서 개체)에 대한 작업 (2) QScriptValue::property()

옵션을 사용하여 인덱스에 액세스 할 수 있습니다.

+0

옵션 2는 쉬운 접근 방법처럼 보였습니다. QScriptValue.property ("길이")를 사용하여 길이를 가져오고 QScriptValue ("INDEX_HERE")를 사용하여 특정 인덱스를 가져 왔습니다. 감사. – voodoogiant