問題タブ [qjsengine]
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 - Qt QJSEngineインポートjsファイル
QJSEngine (QT 5.6) で JavaScript ファイルをインポートすることは可能ですか?
例 1:
プレーンテキスト編集のテキスト:
c++:
jsimport.js ファイル内のテキスト:
結果:
例 2:
PlainTextEdit のテキスト:
同じ C++ コード
結果:
最後のエラーのため、インポートにはいくつかの機能があるようです。
c++ - QScriptEngine から QJSEngine への移行
QScriptEngine コードを QJSEngine に移行しています。今私が持っています:
したがって、ユーザーは PrintLog("what ever"); を置くことができます。たとえば、私のアプリケーションでは、QLineEdit と関数 pars::PrintMainLog が評価されます。
QJSEngine でこれを行う方法はありますか? それで、ユーザーが同じ PrintLog("what ever");? 私が見つける唯一の方法はhereであるため、ユーザーは Logger.PrintLog("what ever"); のようなものを配置する必要があります。ここで、Logger は PrintLog スロットを持つ QObject から継承されたクラスです。
c++ - QJSEngine を使用して JavaScript から Qt API にアクセスする
QJSEngine
アプリケーションをスクリプト可能にするために を使用しています。JavaScript 側でユーザー インターフェイスを変更できるようにしてほしい。現在の主な問題は、JavaScript から Qt API にアクセスすることです。
ウィジェットを作成するために、以下createWidget()
を使用するラッパーを追加しましたQUILoader
。
からのすべての列挙型も登録しました。これにより、 からqt_getQtMetaObject()
の名前空間レベルの列挙型がすべて処理されるようqnamespace.h
です。ただし、パブリック API の一部のようには見えません。
私は本当にこれを手動で行うことになっていますか、それとも何か不足していますか? registerAllTheThings()
Qt API を利用できるグローバルQt
オブジェクトを作成する関数はありませんか?
そうでない場合は、問題があります。で を作成できますが、 などの他のオブジェクトを作成する方法が見つかりませんでしQWidget
た。私はすべての Qt クラスが既に を通じて登録されていると思っていましたが、そうではありません:を返すことで失敗します。繰り返しますが、すべてを登録する初期化関数呼び出しが欠落していますか?QUILoader
QStandardItemModel
qRegisterMetaType()
QMetaType::type("QStandardItemModel")
UnknownType
javascript - QJSEngine を使用して Qt 内で実行される Javascript の速度
バックグラウンド: 私は、以下を必要とするプロジェクトで作業しています: ユーザーは、メイン プログラム (Qt/C++ で記述された GUI) の内部変数を使用していくつかの数学演算を実行するコマンドを記述できます。
私のアプローチは、ユーザーが JavaScript でコマンド/スクリプトを記述できるテキスト ボックスで、Qt がそのコードを評価します。そのために私はQJSEngineを使用しています
問題: JavaScript の計算速度が非常に遅い/遅い。
たとえば、2 つのテキスト ボックス (QTextEdit) と 1 つのボタンを備えた GUI があります。ユーザーが 1 つのテキスト ボックスに JavaScript コードを記述し、ボタンが押されると評価され、結果がもう 1 つのテキスト ボックスに表示されます。
悪いパフォーマンスの例として、ユーザーがこの些細な JavaScript コードを書くと、コンピューターは答えを表示するのに約 3 秒かかります。
一方、Qt/C++ で同じ操作を実行すると、「瞬時に」次のようになります。
JavaScript がインタープリター言語であることは知っていますが、このパフォーマンスは正常ですか?
ここに、この問題を示す小さな Qt サンプル プログラム (pr_Parser) があります。これを Qt Creator 4.0.1 でテストしました。Qt 5.7 MSVC2013 64 ビット。
ありがとうございました。
pr_parser.pro
main.cpp
CMainWindow.h
CMainWindow.cpp
javascript - エラー タイプの QJSValue オブジェクトを作成する方法 - QJSEngine からエラーをスローする
Qt で、Error 型のQJSValueを作成する方法を知っている人はいますか?
Context : QJSEngine::evaluate()を使用して、QT で作成された GUI でユーザーが作成した JavaScript コードを実行します。その JavaScript コードは C++ 関数を呼び出します。ドキュメントによると、QJSEngine::evaluate() は、JavaScript コードにエラーがある場合にのみ、スクリプト例外 (エラー タイプの QJSValue) をスローします。したがって、C++ 関数にエラーがある場合、私のアプローチはエラー タイプの QJSValue を返すことです。QJSEngine::evaluate は C++ 例外をキャッチしないため、そのパスをたどっています。
これは、意図した機能のコード スニペットです。
myCppClass::foo() のミニ例
どうもありがとう。
c++ - QtScript から QML/QJSEngine への移行
アプリケーションのロジックを記述するための JavaScript インタープリターとして QtScript を使用するプラットフォームがあります。
JS 上のスクリプトの例
ファイルのオブジェクトは次のように記述されます
10以上のオブジェクトがプラットフォームに記述され、コンストラクタ/デストラクタに多くのロジックが入れられ、JSコードで呼び出されるQ_INVOKABLEメソッドがあります。
質問: JS コードの構文を保存した QJSEngine にこれらすべてを転送することは可能ですか (それは既に多く書かれています)?
スタックオーバーフローへの応答を探しました
ファクトリを介して行うことを提案しますが、JS コードの可読性が大幅に低下するため、書き直す必要があります。