問題タブ [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 投票する
2 に答える
832 参照

qt - QtScript で通常のパブリック メソッドを使用できるようにする方法

私の Qt アプリケーションでは、QtScript を使用してスクリプトからダイアログのすべてのコントロールにアクセスできます。これを行うには、次のように QScriptEngine の newQObject メソッドを使用します。

たとえば、スクリプトでこれを実行できるようになりました。

これは、公開されたコントロール ( okButton )の呼び出されたメソッド ( setEnabled ) がオブジェクト クラスのパブリック スロットとしてマークされている限り、正常に機能します。残念ながら、スクリプトから呼び出せるようにしたいメソッドの多くは、通常のパブリックスコープでのみ定義されています。

これを解決する 1 つの方法は、各 Qt UI 要素から新しいクラスを派生させ、これらのメソッドをパブリック スロットとしてオーバーライドすることです。しかし、これはコーディングとメンテナンスの大きなオーバーヘッドを意味し、この状況では望ましくありません。

スクリプト エンジンに、既定で通常のパブリック関数を利用可能にするように指示する方法はありますか?

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

qt - QScriptEngine 環境はどのくらいのメモリを使用していますか?

1 つの QScriptEngine 環境で割り当てられたメモリの合計を測定できますか? 同じプロセスに QScriptEngine の多くのインスタンスを含むアプリケーションがあり、各インスタンスが使用するメモリ量を知る必要があります。

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

c++ - カスタムクラスを持つQtScriptinstanceofは、プロトタイプ関連のエラーをスローします

QtScriptモジュールを使用してアプリケーションの一部のコンポーネントをスクリプト化できるQtプロジェクトがあります。

QtScriptで既存のクラスを直接使用できるように何度か試みた後、QObjectとQScriptableを継承するラッパークラスを使用することにしました(主に、QObjectを継承するかどうかに関係なく他のクラスに継承される非qobject派生クラスがあるためです。したがって、すべてのクラスを均一に扱うことは不可能です)。

現在、プロトタイプベースの継承を使用しようとしています。

私はクラスDrawableMeshDrawableしなければならず、それに対応するラッパーWrapper_DrawableとがありWrapper_MeshDrawableます。MeshDrawable継承しDrawableWrapper_MeshDrawable継承しWrapper_Drawableます。

両方のクラスをスクリプトエンジンに認識させます(m_scriptEngine):

私が間違っていなければ、ドキュメントには、C ++で継承関係があるため、スクリプトエンジンがのプロトタイプWrapper_Drawableを型のオブジェクトに適用すると書かれています。Wrapper_MeshDrawable

のすべての子(実際には、にラップされたDrawableの子)Wrapper_Drawable::drawables()を返すメソッドがあります。抽象クラスであるように、すべての子は実際にはsです。Wrapper_DrawableWrapper_DrawableDrawableMeshDrawable

ユーザーにsではDrawableなくWrapper_Drawablesを使用していることを「信じて」もらいたいので、次のように宣言しました。

ここで、wrapper_drawable_objは上記で宣言されています。


Wrapper_MeshDrawablesの配列で宣言されている場合でも、エンジンが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

0 投票する
2 に答える
1562 参照

c++ - QtScriptとスレッド

QtScriptスクリプトからいくつかの同時ジョブを実行したい:

ジョブは、基本的にリモートプロシージャコール(ZeroC Ice)のシーケンスであり、いくつかのポイントで同期する必要があります。

Qt 4.8.0のドキュメントには、QScriptEngineスレッドセーフについては何も書かれていません。私の質問:

  1. 単一を使用QScriptEngineして複数のスレッドからQtScript関数を同時に実行しても安全ですか?

  2. タスクを達成するためにどのようなアプローチをお勧めしますか?

ノート:

  1. スクリプトはプログラマーだけでなく電気技師によっても編集されており、スクリプトをできるだけシンプルでクリーンなものにしたいと思っています。
0 投票する
2 に答える
2036 参照

qt - QtScript と列挙型

Qt アプリケーションに QScript を追加しています。既にメタデータを追加しており、いくつかのメタデータ関数を使用して C++ コードを調べています。これで問題なく動作します。オブジェクト階層をナビゲートし、値 (列挙型を含む) を出力できます。

しかし、Qt スクリプトで列挙型が機能する様子が見られません。

私は私のクラスを持っています...

列挙型を引数として取るメソッドを持つ別のクラスがあります...

このクラスは別のクラスで公開されています - 申し訳ありませんが、例を単純化する必要がありました。次のjscriptコードを書くと、

期待どおりのエラーが発生します...

そのため、列挙型はqtscriptに認識されているようです。

私が苦労しているのは、jscript から列挙型引数を設定することです。いろいろな組み合わせを試した...

などなど。

整数を使おうとすると...

これは、jscript が私の列挙型を認識していないことを意味しているようです。

助言がありますか?

列挙型にアクセスするには、qRegisterMetaType または qScriptRegisterMetaType を使用する必要がありますか? ドキュメントは、私がこれを行う必要があることを示唆していません。qScriptRegisterMetaType メソッドのコンバーター関数を実装する必要がありますか?

または、私の構文は jscript に対して間違っていますか?

誰かが実用的な例を持っていますか?

ありがとう、フランク

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

qt - QStringListをQtScript配列として公開する

いくつかのC++データを操作する必要のあるQtScriptがいくつかあります。すでにいくつかの変数を公開していますQScriptEngine::globalObject().setProperty()が、これは単純なデータ型とQStringの場合にのみ機能するようです。

を使用してみましQScriptEngine::newVariant()たが、のメンバー関数はどれもQVariantスクリプトエンジンに公開されていません。

理想的には、QStringListをプレーンなQtScript配列に変換し、その上でネイティブ配列関数を呼び出せるようにしたいと思います。これを行う方法はありますか?

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

javascript - QtScript Javascript オブジェクトがプロパティを失う

QScriptEngine を作成し、いくつかのシグナル/スロットを持つグローバル オブジェクトとして QObject を設定します。次に、いくつかのスクリプト ファイルをロードし、(評価を使用して) エンジンに渡します。スクリプトはオブジェクトを作成し、グローバル オブジェクトのいくつかの信号をその関数に接続します。

悲しいことに、スクリプト オブジェクトのプロパティ (this.password) は、関数がシグナルから呼び出されるとクリアされます (評価中に設定されていることを確認しました)。

スクリプトは次のとおりです。

なぜそれが起こるのでしょうか?

こんにちはベン

0 投票する
5 に答える
4822 参照

javascript - qtScript の JavaScript の setTimeout に相当するものは何ですか?

追加することはあまりありません。qtScript の JavaScript の setTimeout に相当するものは何ですか?

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

qt - 「アプリケーションをスクリプト可能にする」とは何を意味し、いつ使用する必要がありますか?

最近、Qt スクリプト モジュールと呼ばれる Qt のいくつかのクラスに気付きました。ドキュメントによると、アプリケーションをスクリプト可能にするために使用されています。ここに私の質問があります:

  1. どういう意味ですか?アプリケーションをスクリプト可能にしますか?
  2. また、いつ使用する必要がありますか?

前もって感謝します