スロットやスクリプトからの c++ 値へのアクセスに関するものではない、優れた QtScript チュートリアルはありますか? 私が必要とするのは、配列値でいくつかの正規表現を使用し、出力をメインプログラムに送り返す外部ファイル内の1つの関数だけです。
シグナル/スロットを使用して実行できることは理解していますが、オーバーヘッドのように見え、もっと簡単な方法があると確信しています。
あなたがしたいことは、関数を定義するそのファイルで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
. サンプルにデモが含まれています。
スクリプティングのような中程度の複雑な問題が専門家によってごちゃ混ぜにされ、彼らが何をしようとしているのか誰も理解できないというのは驚くべきことです。すべての成功した教育ルールに違反しており、結果は、ここにつながるユーザーからの質問によって判断するのは惨事です.
スクリプトは、特定のコミュニケーション (この場合は実行するアクション) を意味する表記形式です。このプロセスでは、翻訳辞書を設計する必要があります。スクリプトを事前定義された結果に翻訳するために、魔法が起こるだけでこれは決して行われないことに注意してください。ただし、スクリプト エンジンは常に、スクリプトを評価するための情報を取得する前に、スクリプトを評価するタスクを負っています。これはバカによる教えを示しています。
スクリプトを評価するスクリプト エンジンを表示する前に、評価を実行するようにエンジンに教える方法を受講者に示す必要があります。これは、私がレビューした 15 のスクリプト作成例のいずれでも実行されていません。したがって、Qt Script は定義によって魔法を実行する必要があります。精神的なテレパシー以外に他の可能性はありません。あなたは厄介な箱の中に身を置いたので、今あなたに向かって何が起こっているかを知っていることを願っています.