問題タブ [qtscript]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - QTScript の型付き配列
ファイルとの間で C++ スタイルのデータをバイナリ形式で読み書きする JavaScript ライブラリがあります。そのために、型付き配列 (float32array、arraybuffer...) を使用します。
このライブラリを QtScript に移植する必要があります。QTScript は、型付き配列を定義する ECMA-262 に準拠していると思われますが、うまく動作させることができません。
誰もそれを試しましたか?
qt - QJSEngine をデバッグしていますか?
(長時間実行される) ユーザー スクリプト用の JS API を提供するプロジェクトがあります。このプロジェクトはまだ QtScript モジュールを使用していますが、これはモジュールがかなり長い間廃止されているため、私を悩ませています。
私の問題は、ユーザーが JS コードをデバッグできるようにする必要があることです。これは、QtScript、特に QScriptEngineDebugger が本当に便利な場所です。
今、「Qt 5.7 の新機能」ヘルプ ページの 2 行を読みました。
すべてのデバッグ サービスが (QQmlEngine ではなく) QJSEngine で動作するようになりました。これにより、非 QML JavaScript のデバッグまたはプロファイリングが可能になります。
複数の QJSEngine インスタンスを同時にデバッグするためのサポートが追加されました。
明らかにそれが私の目に留まりましたが、残りのヘルプを検索しても、QJSEngine のデバッグに関するものは何も見つかりませんでした。
QtScript と QScriptEngineDebugger に似たものを QJSEngine で実現する方法を誰か教えてもらえますか?
c++ - QScriptEngine から QJSEngine への移行
QScriptEngine コードを QJSEngine に移行しています。今私が持っています:
したがって、ユーザーは PrintLog("what ever"); を置くことができます。たとえば、私のアプリケーションでは、QLineEdit と関数 pars::PrintMainLog が評価されます。
QJSEngine でこれを行う方法はありますか? それで、ユーザーが同じ PrintLog("what ever");? 私が見つける唯一の方法はhereであるため、ユーザーは Logger.PrintLog("what ever"); のようなものを配置する必要があります。ここで、Logger は PrintLog スロットを持つ QObject から継承されたクラスです。
c++ - 評価前に QScriptValue ローカル値を設定する
Qt 4.8 で、C++ 側からQScriptValue
-local 値を aに設定することは可能QScriptEngine
ですか?
たとえば、私が持っているとしましょう:
そして、その出力を次のようにしたいと思います。
上記の人為的な例に対する明白な解決策は、「loc」をグローバルにして、それに応じて設定 + リセットすることですが、この質問から気をそらす理由から、それは私が探しているものではありません。私は…したい:
- 「loc」はそれぞれにローカルです
QScriptValue
- スクリプトの前に追加するなどして、スクリプト文字列を人為的に変更しない
QString().sprintf("loc = %d;", 42)
ようにします。 - 単一の
QScriptEngine
.
私が実際に試してみることができた唯一のことは次のとおりです。
しかし、値はすでに によって完全に評価されevaluate()
ているようでsetProperty()
、効果はありません (驚くことではありません)。
私はまた、QScriptProgram
それがプログラムローカル環境を提供することを望んでいましたが、悲しいかな。
私はドキュメントを見ており、これを投稿した後もそれらを見続けますが、これを使用するのはこれが初めてでありQScriptEngine
、私の脳がどろどろになっていることを認めなければならないので、それが正しいかどうか、完全に謝罪します明らか。RTFM を有効な回答として受け入れます。
c++ - QScriptEngine#pushContext/popContext の外で Qt スクリプト コンテキスト環境を維持する方法はありますか?
Qt 4.8 のスクリプト エンジンでは、「ローカル」変数は、からを取得し、そのアクティベーション オブジェクトのプロパティを設定するQScriptContext
QScriptEngine::pushContext
ことで設定できます。これは、push/pop 呼び出し内でのみ実行できます。これは、a が使用できる唯一の場所QScriptContext
であり、AFAICT には環境として使用するQScriptEngine#evaluate
aに相当するものがないためです。QScriptContext
プッシュ/ポップ呼び出し以外の評価で使用する環境を維持する方法はありますか? たとえばQScriptValue
、アクティベーション オブジェクトとして使用する を作成してから、次のように設定しようとしました。
しかし、それはうまくいきません。未定義であるため、nan
の代わりに出力します。何らかの理由で値を変更しませんでした。1
value
setActivationObject
私の一般的な目標は次のとおりです。
- 評価コードの外部にローカル環境をセットアップします。
pushContext
次に、とのpopContext
呼び出しの間でスクリプトを評価するときに、その環境内のすべての変数を毎回再設定する必要なく、その事前構成されたローカル環境を使用します。
そう:
- これを行う方法はありますか?
- 正しい軌道に乗っているのに、セットアップが
ao
不適切である可能性はありますか? たとえば、QScriptEngine#newActivationObject()
使用すると「実装されていない」エラーが発生する文書化されていないものがありますが、これはヒントでしょうか?
ローカル コンテキストを設定する方法はありますが、基本的にコンテキストをプッシュするたびに再構成する必要はありません (コンテキストをポップするたびに本質的に失われるため)。
c++ - QtScript から QML/QJSEngine への移行
アプリケーションのロジックを記述するための JavaScript インタープリターとして QtScript を使用するプラットフォームがあります。
JS 上のスクリプトの例
ファイルのオブジェクトは次のように記述されます
10以上のオブジェクトがプラットフォームに記述され、コンストラクタ/デストラクタに多くのロジックが入れられ、JSコードで呼び出されるQ_INVOKABLEメソッドがあります。
質問: JS コードの構文を保存した QJSEngine にこれらすべてを転送することは可能ですか (それは既に多く書かれています)?
スタックオーバーフローへの応答を探しました
ファクトリを介して行うことを提案しますが、JS コードの可読性が大幅に低下するため、書き直す必要があります。
c++ - QVariant をネイティブ QtScriptValue (数値、文字列など) に変換する方法
QtScript スクリプトの値の検証に問題がありました。バリデータ関数は次のようになります。
私の設定では、文字列"X"
も無効な値です。値は、次のようにオブジェクトに追加されます。
問題は、文字列として変換さ"undefined"
れる値が常にtypeof
チェックを通過していたことです。そこで、テスト デバッグ出力を追加しました。someQtscriptValue
スクリプト全体を印刷しました:
そして結果は紛らわしいです (短くすると、すべて同じように見えます):
また、各値に関する情報を出力することにしました。
そして、これはさらに驚くべきことです:
どうやら、 「未定義」の値を含むすべての値がオブジェクトとして型を持っていたため、それから作成QScriptValue
するQVariant
とオブジェクトのように動作します。
QVariants から QScript 値を作成する正しい方法は何ですか?