問題タブ [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.
qt - QtScript で通常のパブリック メソッドを使用できるようにする方法
私の Qt アプリケーションでは、QtScript を使用してスクリプトからダイアログのすべてのコントロールにアクセスできます。これを行うには、次のように QScriptEngine の newQObject メソッドを使用します。
たとえば、スクリプトでこれを実行できるようになりました。
これは、公開されたコントロール ( okButton )の呼び出されたメソッド ( setEnabled ) がオブジェクト クラスのパブリック スロットとしてマークされている限り、正常に機能します。残念ながら、スクリプトから呼び出せるようにしたいメソッドの多くは、通常のパブリックスコープでのみ定義されています。
これを解決する 1 つの方法は、各 Qt UI 要素から新しいクラスを派生させ、これらのメソッドをパブリック スロットとしてオーバーライドすることです。しかし、これはコーディングとメンテナンスの大きなオーバーヘッドを意味し、この状況では望ましくありません。
スクリプト エンジンに、既定で通常のパブリック関数を利用可能にするように指示する方法はありますか?
qt - QScriptEngine 環境はどのくらいのメモリを使用していますか?
1 つの QScriptEngine 環境で割り当てられたメモリの合計を測定できますか? 同じプロセスに QScriptEngine の多くのインスタンスを含むアプリケーションがあり、各インスタンスが使用するメモリ量を知る必要があります。
c++ - カスタムクラスを持つQtScriptinstanceofは、プロトタイプ関連のエラーをスローします
QtScriptモジュールを使用してアプリケーションの一部のコンポーネントをスクリプト化できるQtプロジェクトがあります。
QtScriptで既存のクラスを直接使用できるように何度か試みた後、QObjectとQScriptableを継承するラッパークラスを使用することにしました(主に、QObjectを継承するかどうかに関係なく他のクラスに継承される非qobject派生クラスがあるためです。したがって、すべてのクラスを均一に扱うことは不可能です)。
現在、プロトタイプベースの継承を使用しようとしています。
私はクラスDrawable
をMeshDrawable
しなければならず、それに対応するラッパーWrapper_Drawable
とがありWrapper_MeshDrawable
ます。MeshDrawable
継承しDrawable
、Wrapper_MeshDrawable
継承しWrapper_Drawable
ます。
両方のクラスをスクリプトエンジンに認識させます(m_scriptEngine
):
私が間違っていなければ、ドキュメントには、C ++で継承関係があるため、スクリプトエンジンがのプロトタイプWrapper_Drawable
を型のオブジェクトに適用すると書かれています。Wrapper_MeshDrawable
のすべての子(実際には、にラップされたDrawableの子)Wrapper_Drawable::drawables()
を返すメソッドがあります。抽象クラスであるように、すべての子は実際にはsです。Wrapper_Drawable
Wrapper_Drawable
Drawable
MeshDrawable
ユーザーにsではDrawable
なくWrapper_Drawable
sを使用していることを「信じて」もらいたいので、次のように宣言しました。
ここで、wrapper_drawable_objは上記で宣言されています。
Wrapper_MeshDrawable
sの配列で宣言されている場合でも、エンジンがsを認識するかどうかをテストしたかったWrapper_Drawable
のです。
悲しいことに、instanceofはこのエラーをスローします:
これを実行しようとするcurChildren instanceof Number
とfalseが返されるため、問題はWrapper_Drawableに関連していると思いますが、正確に何であるかを理解できません。
よろしくお願いします。
編集> ScriptManager(スクリプトエンジンを処理し、さまざまなタイプを宣言する)、Wrapper_Drawable(一部のメソッドのみ、それ以外の場合はこのメッセージを投稿できません)、およびWrapper_MeshDrawableのコードを追加しました。
またinstanceof
、Wrapper_Drawableオブジェクトで、Numberでfalseを返し、Objectでtrueを返し、Drawable(名前が言うようにWrapper_Drawableオブジェクト)で上記のエラーをスローすることを再確認しました。
したがって、Wrapper_Drawableクラスのコードがあります。
CPP:
MeshDrawable:
CPP:
そして最後に、ScriptManager(スクリプトエンジンにさまざまなタイプを宣言します):
CPP
c++ - QtScriptとスレッド
QtScriptスクリプトからいくつかの同時ジョブを実行したい:
ジョブは、基本的にリモートプロシージャコール(ZeroC Ice)のシーケンスであり、いくつかのポイントで同期する必要があります。
Qt 4.8.0のドキュメントには、QScriptEngine
スレッドセーフについては何も書かれていません。私の質問:
単一を使用
QScriptEngine
して複数のスレッドからQtScript関数を同時に実行しても安全ですか?タスクを達成するためにどのようなアプローチをお勧めしますか?
ノート:
- スクリプトはプログラマーだけでなく電気技師によっても編集されており、スクリプトをできるだけシンプルでクリーンなものにしたいと思っています。
qt - QtScript と列挙型
Qt アプリケーションに QScript を追加しています。既にメタデータを追加しており、いくつかのメタデータ関数を使用して C++ コードを調べています。これで問題なく動作します。オブジェクト階層をナビゲートし、値 (列挙型を含む) を出力できます。
しかし、Qt スクリプトで列挙型が機能する様子が見られません。
私は私のクラスを持っています...
列挙型を引数として取るメソッドを持つ別のクラスがあります...
このクラスは別のクラスで公開されています - 申し訳ありませんが、例を単純化する必要がありました。次のjscriptコードを書くと、
期待どおりのエラーが発生します...
そのため、列挙型はqtscriptに認識されているようです。
私が苦労しているのは、jscript から列挙型引数を設定することです。いろいろな組み合わせを試した...
などなど。
整数を使おうとすると...
これは、jscript が私の列挙型を認識していないことを意味しているようです。
助言がありますか?
列挙型にアクセスするには、qRegisterMetaType または qScriptRegisterMetaType を使用する必要がありますか? ドキュメントは、私がこれを行う必要があることを示唆していません。qScriptRegisterMetaType メソッドのコンバーター関数を実装する必要がありますか?
または、私の構文は jscript に対して間違っていますか?
誰かが実用的な例を持っていますか?
ありがとう、フランク
qt - QStringListをQtScript配列として公開する
いくつかのC++データを操作する必要のあるQtScriptがいくつかあります。すでにいくつかの変数を公開していますQScriptEngine::globalObject().setProperty()
が、これは単純なデータ型とQStringの場合にのみ機能するようです。
を使用してみましQScriptEngine::newVariant()
たが、のメンバー関数はどれもQVariant
スクリプトエンジンに公開されていません。
理想的には、QStringListをプレーンなQtScript配列に変換し、その上でネイティブ配列関数を呼び出せるようにしたいと思います。これを行う方法はありますか?
javascript - QtScript Javascript オブジェクトがプロパティを失う
QScriptEngine を作成し、いくつかのシグナル/スロットを持つグローバル オブジェクトとして QObject を設定します。次に、いくつかのスクリプト ファイルをロードし、(評価を使用して) エンジンに渡します。スクリプトはオブジェクトを作成し、グローバル オブジェクトのいくつかの信号をその関数に接続します。
悲しいことに、スクリプト オブジェクトのプロパティ (this.password) は、関数がシグナルから呼び出されるとクリアされます (評価中に設定されていることを確認しました)。
スクリプトは次のとおりです。
なぜそれが起こるのでしょうか?
こんにちはベン
javascript - qtScript の JavaScript の setTimeout に相当するものは何ですか?
追加することはあまりありません。qtScript の JavaScript の setTimeout に相当するものは何ですか?
qt - 「アプリケーションをスクリプト可能にする」とは何を意味し、いつ使用する必要がありますか?
最近、Qt スクリプト モジュールと呼ばれる Qt のいくつかのクラスに気付きました。ドキュメントによると、アプリケーションをスクリプト可能にするために使用されています。ここに私の質問があります:
- どういう意味ですか?アプリケーションをスクリプト可能にしますか?
- また、いつ使用する必要がありますか?
前もって感謝します