Y a-t-il un bon tutoriel QtScript qui ne concerne pas les slots ou l'accès aux valeurs C++ du script? Tout ce dont j'ai besoin est une fonction dans un fichier externe qui utilise des expressions rationnelles sur les valeurs de tableau, puis renvoie la sortie au programme principal. Je comprends, que cela peut être fait en utilisant des signaux/slots, mais cela ressemble à des frais généraux et je suis sûr qu'il y a un moyen plus simple.Un didacticiel QtScript décent?
Répondre
Il semble que ce que vous voulez faire est d'utiliser QScriptEngine::evaluate() sur ce fichier définissant la fonction (passée en texte de script), puis l'invoquer avec QScriptEngine::call(). Aucun signal ou emplacement requis.
Quelque chose le long de ces lignes (non testé):
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...)
}
Notez que il y a beaucoup de conversion avant et en arrière, vous aurez à faire. Si vous voulez juste des expressions régulières dans Qt, elles existent déjà: QRegExp
. Il y a une démo incluse dans les échantillons:
Il est incroyable de voir comment une question complexe que moyen de script a été embrouillé par les experts afin que personne d'autre ne comprend ce qu'ils essaient de faire. Toutes les règles d'enseignement réussies sont violées et les résultats sont un désastre à juger par les questions des utilisateurs qui mènent ici. Un script est une forme de notation qui implique une communication spécifique, dans ce cas, une action à effectuer. Le processus exige qu'un dictionnaire de traduction soit conçu, notez que ce n'est jamais fait que la magie est censée se produire, pour traduire le script en résultats prédéfinis. Pourtant, le moteur de script est toujours chargé d'évaluer le script avant d'avoir des informations à le faire. Cela affiche l'enseignement par des crétins. Avant de montrer un moteur de script évaluant un script, l'élève doit être montré comment enseigner au moteur à effectuer l'évaluation. Cela n'est jamais fait dans aucun des quinze exemples de script que j'ai examinés. Donc, Qt Script doit effectuer de la magie selon votre définition. Il n'y a pas d'autre possibilité que la télépathie mentale. Vous vous êtes mis dans une boîte méchante, alors j'espère que vous savez ce qui vous arrive maintenant.