2010-01-05 3 views
1

슬롯이나 C++ 값을 스크립트에서 액세스하지 않는 좋은 QtScript 자습서가 있습니까? 내가 필요로하는 것은 배열 값에 대한 몇 가지 정규 표현식을 사용하는 외부 파일에 하나의 함수를 넣은 다음 메인 프로그램으로 다시 출력을 보냅니다.괜찮은 QtScript 자습서가 있습니까?

내가 신호/슬롯을 사용하여 수행 할 수 있음을 이해하지만 오버 헤드처럼 보이며 간단한 방법이 있다고 확신합니다.

답변

3

당신이하고자하는 것처럼 QScriptEngine::evaluate() 함수를 정의하는 파일 (스크립트 텍스트로 전달)에 사용하고 다음 QScriptEngine::call()와 함께 호출하는 것 같습니다. 신호 또는 슬롯이 필요하지 않습니다. (테스트되지 않은)이 라인을 따라

뭔가 : 거기에 많은 다시 변환하는 그리고 앞으로 당신이해야 할거야

QScriptEngine engine; 

// Use evaluate to get a QScriptValue that holds the function 
QScriptValue functionSV = engine.evaluate(
    "function cube(x) { return x * x * x; }" 
); 

// Build an argument list of QScriptValue types to proxy the C++ 
// types into a format that the script engine can understand 
QScriptValueList argsSV; 
argsSV << 3; 

// Make an empty script value for "this" object when we invoke 
// cube(), since it's a global function 
QScriptValue thisSV(); 

// Call the function, getting back a ScriptValue 
QScriptValue resultSV = functionSV.call(thisSV, argsSV); 

if (engine.hasUncaughtException() || !resultSV.isNumber()) { 
    // The code had an uncaught exception or didn't return 
    // the type you were expecting. 

    // (...error handling...) 

} else { 
    // Convert the result to a C++ type 
    int result = resultSv.toInt(); 

    // (...do whatever you want to do w/the result...) 
} 

참고. 정규 표현식을 Qt에 넣고 싶다면 이미 존재합니다 : QRegExp. 샘플에 포함 된 데모가있다 :

http://doc.trolltech.com/4.2/tools-regexp.html

0

그것은 아무도 그들이 뭘 하려는지 이해되지 않도록 스크립트와 같은 매체 복잡한 문제는 전문가에 의해 뒤죽박죽 된 방법 굉장하다. 모든 성공적인 교칙을 위반하고 결과는 재판을 통해 사용자가 제기 한 질문에 의해 판단됩니다.

스크립트는 특정 통신 (이 경우 수행 할 작업)을 의미하는 표기법의 한 형태입니다. 이 과정을 수행하려면 번역 사전을 설계해야하며 스크립트가 사전 정의 된 결과로 변환되도록하려면 마법 만 수행하면 안됩니다. 그러나 스크립트 엔진은 항상 스크립트를 평가하기 전에 스크립트를 평가해야합니다. 이것은 바보들에 의한 가르침을 보여줍니다.

스크립트 엔진을 보여 주려면 스크립트를 평가하기 전에 학생에게 평가를 수행하도록 엔진을 가르치는 방법을 보여줘야합니다. 이것은 필자가 검토 한 스크립팅의 15 가지 예에서 결코 수행되지 않습니다. 따라서 Qt Script는 사용자의 정의에 따라 마술을 수행해야합니다. 정신적 인 텔레파시 외에 다른 가능성은 없습니다. 너는 불쾌한 박스 안에 들어갔다. 그래서 나는 네가 지금 무엇을 향해오고 있는지 알기를 바란다.

관련 문제