問題タブ [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.

0 投票する
0 に答える
54 参照

qt - ReferenceError: 変数が見つかりません: QTimer - スクリプトで Qtimer を使用できないのはなぜですか?

SO の他の場所で提案されたこのスニペットを試しました:

結果:

タイマーを機能させるために設定する必要があるものはありますか?

0 投票する
0 に答える
55 参照

javascript - QTScript の型付き配列

ファイルとの間で C++ スタイルのデータをバイナリ形式で読み書きする JavaScript ライブラリがあります。そのために、型付き配列 (float32array、arraybuffer...) を使用します。

このライブラリを QtScript に移植する必要があります。QTScript は、型付き配列を定義する ECMA-262 に準拠していると思われますが、うまく動作させることができません。

誰もそれを試しましたか?

0 投票する
0 に答える
982 参照

qt - QJSEngine をデバッグしていますか?

(長時間実行される) ユーザー スクリプト用の JS API を提供するプロジェクトがあります。このプロジェクトはまだ QtScript モジュールを使用していますが、これはモジュールがかなり長い間廃止されているため、私を悩ませています。

私の問題は、ユーザーが JS コードをデバッグできるようにする必要があることです。これは、QtScript、特に QScriptEngineDebugger が本当に便利な場所です。

今、「Qt 5.7 の新機能」ヘルプ ページの 2 行を読みました。

すべてのデバッグ サービスが (QQmlEngine ではなく) QJSEngine で動作するようになりました。これにより、非 QML JavaScript のデバッグまたはプロファイリングが可能になります。
複数の QJSEngine インスタンスを同時にデバッグするためのサポートが追加されました。

明らかにそれが私の目に留まりましたが、残りのヘルプを検索しても、QJSEngine のデバッグに関するものは何も見つかりませんでした。

QtScript と QScriptEngineDebugger に似たものを QJSEngine で実現する方法を誰か教えてもらえますか?

0 投票する
0 に答える
509 参照

c++ - QScriptEngine から QJSEngine への移行

QScriptEngine コードを QJSEngine に移行しています。今私が持っています:

したがって、ユーザーは PrintLog("what ever"); を置くことができます。たとえば、私のアプリケーションでは、QLineEdit と関数 pars::PrintMainLog が評価されます。

QJSEngine でこれを行う方法はありますか? それで、ユーザーが同じ PrintLog("what ever");? 私が見つける唯一の方法はhereであるため、ユーザーは Logger.PrintLog("what ever"); のようなものを配置する必要があります。ここで、Logger は PrintLog スロットを持つ QObject から継承されたクラスです。

0 投票する
1 に答える
117 参照

c++ - 評価前に QScriptValue ローカル値を設定する

Qt 4.8 で、C++ 側からQScriptValue-local 値を aに設定することは可能QScriptEngineですか?

たとえば、私が持っているとしましょう:

そして、その出力を次のようにしたいと思います。

上記の人為的な例に対する明白な解決策は、「loc」をグローバルにして、それに応じて設定 + リセットすることですが、この質問から気をそらす理由から、それは私が探しているものではありません。私は…したい:

  • 「loc」はそれぞれにローカルですQScriptValue
  • スクリプトの前に追加するなどして、スクリプト文字列を人為的に変更しないQString().sprintf("loc = %d;", 42)ようにします。
  • 単一のQScriptEngine.

私が実際に試してみることができた唯一のことは次のとおりです。

しかし、値はすでに によって完全に評価されevaluate()ているようでsetProperty()、効果はありません (驚くことではありません)。

私はまた、QScriptProgramそれがプログラムローカル環境を提供することを望んでいましたが、悲しいかな。

ドキュメントを見ており、これを投稿した後もそれらを見続けますが、これを使用するのはこれが初めてでありQScriptEngine、私の脳がどろどろになっていることを認めなければならないので、それが正しいかどうか、完全に謝罪します明らか。RTFM を有効な回答として受け入れます。

0 投票する
1 に答える
411 参照

c++ - QScriptEngine#pushContext/popContext の外で Qt スクリプト コンテキスト環境を維持する方法はありますか?

Qt 4.8 のスクリプト エンジンでは、「ローカル」変数は、からを取得し、そのアクティベーション オブジェクトのプロパティを設定するQScriptContextQScriptEngine::pushContextことで設定できます。これは、push/pop 呼び出し内でのみ実行できます。これは、a が使用できる唯一の場所QScriptContextであり、AFAICT には環境として使用するQScriptEngine#evaluateaに相当するものがないためです。QScriptContext

プッシュ/ポップ呼び出し以外の評価で使用する環境を維持する方法はありますか? たとえばQScriptValue、アクティベーション オブジェクトとして使用する を作成してから、次のように設定しようとしました。

しかし、それはうまくいきません。未定義であるため、nanの代わりに出力します。何らかの理由で値を変更しませんでした。1valuesetActivationObject

私の一般的な目標は次のとおりです。

  1. 評価コードの外部にローカル環境をセットアップします。
  2. pushContext次に、とのpopContext呼び出しの間でスクリプトを評価するときに、その環境内のすべての変数を毎回再設定する必要なく、その事前構成されたローカル環境を使用します。

そう:

  • これを行う方法はありますか?
  • 正しい軌道に乗っているのに、セットアップがao不適切である可能性はありますか? たとえば、QScriptEngine#newActivationObject()使用すると「実装されていない」エラーが発生する文書化されていないものがありますが、これはヒントでしょうか?

ローカル コンテキストを設定する方法はありますが、基本的にコンテキストをプッシュするたびに再構成する必要はありません (コンテキストをポップするたびに本質的に失われるため)。

0 投票する
0 に答える
728 参照

c++ - QtScript から QML/QJSEngine への移行

アプリケーションのロジックを記述するための JavaScript インタープリターとして QtScript を使用するプラットフォームがあります。

JS 上のスクリプトの例

ファイルのオブジェクトは次のように記述されます

10以上のオブジェクトがプラットフォームに記述され、コンストラクタ/デストラクタに多くのロジックが入れられ、JSコードで呼び出されるQ_INVOKABLEメソッドがあります。

質問: JS コードの構文を保存した QJSEngine にこれらすべてを転送することは可能ですか (それは既に多く書かれています)?

スタックオーバーフローへの応答を探しました

QJSEngine の動的 C++ オブジェクト

ファクトリを介して行うことを提案しますが、JS コードの可読性が大幅に低下するため、書き直す必要があります。

0 投票する
1 に答える
261 参照

c++ - QVariant をネイティブ QtScriptValue (数値、文字列など) に変換する方法

QtScript スクリプトの値の検証に問題がありました。バリデータ関数は次のようになります。

私の設定では、文字列"X"も無効な値です。値は、次のようにオブジェクトに追加されます。

問題は、文字列として変換さ"undefined"れる値が常にtypeofチェックを通過していたことです。そこで、テスト デバッグ出力を追加しました。someQtscriptValueスクリプト全体を印刷しました:

そして結果は紛らわしいです (短くすると、すべて同じように見えます):

また、各値に関する情報を出力することにしました。

そして、これはさらに驚くべきことです:

どうやら、 「未定義」の値を含むすべての値がオブジェクトとして型を持っていたため、それから作成QScriptValueするQVariantとオブジェクトのように動作します。

QVariants から QScript 値を作成する正しい方法は何ですか?