問題タブ [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 - Qt:WebkitのQtScriptとJavascriptの違いは何ですか
私はWeb開発に精通しているので、JavascriptがWebkitで何ができるかを正確に知っています。アプリでスクリプト機能を使用したい場合は、2つの方法があると思います。
- qtwebkitを使用して、独自のJavascriptスクリプトを実行している非表示のWebページを開きます。
- qtscriptを使用します。
今のところ、ほとんどのアプリロジックをスクリプトで実装したいのですが、それらの違いと、さまざまな状況でのjavascriptまたはqtscriptの選択方法について疑問に思っています。
この質問がそれほど専門的でない場合は申し訳ありません。ありがとう
c++ - QtScript出力リダイレクト
このコードを呼び出すと:
(printメソッドからの)出力テキストは、メインアプリケーションの端末に書き込まれます。
カスタムQIODeviceにリダイレクトする方法はありますか?
javascript - QWidget を継承する Javascript オブジェクト
私は Javascript と Qt で何かをしています。私の目的のために、QWidget を継承する JavaScript オブジェクトが必要です。これまでのところ、次のことを試しました。
クラス「Test」からオブジェクトをインスタンス化し、show()
メソッドの呼び出しでウィジェットを取得します。
ただし、次のインタープリター エラーが発生します。
エラー: 実行/評価中: TypeError: Function.prototype.connect: ターゲットは関数ではありません
this.button.clicked.connect(this.slot);
次のように定義された静的メソッドを呼び出すように行を変更すると:
プログラムは正常に実行されますが、静的メソッドはダメです。slot()
インスタンス化されたオブジェクト以外は誰も呼び出さないでください。
この写真の何が問題になっていますか? Qtオブジェクトを継承するJavascriptオブジェクトを経験した人はいますか? 前もって感謝します
c++ - グローバルオブジェクトとしてのQScriptValueのディープコピー
自動化のためにQtScriptを使用するプログラムがあります。スクリプトが次のようにアクセスできるように、スクリプトエンジンのグローバルスコープに多数のC++関数とクラスを追加しました。
複数のスクリプトを連続して実行できるようにしたいのですが、それぞれが新しいグローバル状態になっています。したがって、1つのスクリプトがグローバル変数を設定する場合
次のスクリプトを実行する前に、その変数を消去したいと思います。これを行うための私の方法は、スクリプトエンジンのグローバルオブジェクトのディープコピーを作成し、スクリプトの実行が終了したときにそれを復元することです。しかし、私のsystem
関数が突然エラーで壊れたため、ディープコピーは機能していません:
これが私のディープコピー機能です。http:
//qt.gitorious.org/qt-labs/scxml/blobs/master/src/qscxml.cpp
(SkipInEnumeration
無限ループを回避するために挿入されました)
編集:問題の一部は、デバッガー(QScriptEngineDebugger)で、追加した関数とコンストラクターが型として表示されるはずFunction
ですが、コピー後は型として表示されることObject
です。既存の関数を複製する新しい関数を作成する良い方法をまだ見つけていません(QScriptEngine :: newFunctionは実際の関数ポインターを取ります)。
python - QtScript イントロスペクション/リフレクション?
QtScript はイントロスペクション/リフレクション (たとえば、python の dir() など) をサポートしており、実行時にオブジェクト モデルを探索して内部から API を「マッピング」できますか?
javascript - QtScript の変数影響の問題
C++ 側でスクリプトの単純な操作の結果を取得しようとしています。
QScriptValue (myvar) を作成して呼び出しますengine.globalObject().setProperty("result", myvar);
。次に、"result = anothervar + 7;" を評価します。evaluate メソッドの戻り値は問題ありませんが、変数の結果は問題ありません。スクリプトが「result = anothervar + 7; a=1」の場合、結果の値は OK です。
Qt のバグであるにはあまりにもばかげているように見えます。
ありがとう
ジェフ
javascript - ネームスペース QScriptEngine 拡張機能
QScriptEngine 拡張機能で名前空間を取得する方法を誰かに説明してもらえますか? script/ の下にディレクトリ foo/ があり、__init__.js ファイルが実行されるように設定しました。
私の C++ コードでは: engine.evaluate("hello();"); // 正常に動作します
だから私の質問は、foo/bar/whatever (foo.bar.whatever) のようなファイル階層のポイントは何ですか? コード内で名前空間を作成しようとする例をいくつか見てきましたが、コンパイラ エラーが発生せずにそれを機能させることはできないようです。
そして私のC++コードでは:
Qt が名前空間を処理する方法を誤解していますか? どのファイルから取得されたかに関係なく、実際にすべてをグローバルスコープにマッシュアップする必要がありますか? これらのタイプの名前空間を作成するための適切な例はありますか? ありがとう。
qt - Qt:QtScriptアクセス用のポインターと前方宣言を含むQ_PROPERTY
問題
Q_OBJECTとQ_PROPERTYを使用して、スクリプトからいくつかのオブジェクトにアクセスするプロジェクトを作成しています。私には2つの問題があります:
- 前方宣言を使用するクラスをスクリプト可能にする
- プロパティをポインタとして返す
説明
1.なぜ前方宣言?
Aはテンプレートのためにヘッダーに完全なBタイプを必要とするため、クラスBはAへの前方宣言を取得します。Bはヘッダーに不完全な型(A *)のみを必要とするため、前方宣言は有効です。
2.なぜポインタを返すのですか?
スクリプト内の実際のオブジェクトにアクセスする必要があるため、コピーを返すことはできません。Qtはスロットが参照を返すことを許可しないため、参照を返すことはできません。それらのタイプは無視され、void*のみを返します。
コード
ペーストビンまたはZIPアーカイブとして、または最小限の例のZIPアーカイブとして、テスト/再生用の完全なコードダウンロードが利用可能です。前方宣言とMOCのためにファイルを分割する必要がありました。テストするためにMakefileを追加しました。depsを作成します:g ++、moc、Qt。
重要な部分
スクリプトのエラー行:
コンパイルエラー
上記のQ_PROPERTYをコメントアウトすると、このエラーは消えます。
スクリプト例外
Q_PROPERTYを省略し、スクリプトからスロットとしてGetA()メソッドを呼び出すと、次の例外が発生します。
これでA*を登録すると、次のqRegisterMetaType<A*>("A*");
ように変更されます。
これは、GetA()がAオブジェクトを返さないか、何らかの方法でポインターを返すことを示していますが、スクリプトはそれを逆参照できません。GetA()は実際にを返しますがQVariant(A*)
、これはどういうわけか使用できますか?
質問:
- どういうわけか不完全な型からQ_PROPERTYを作成できますか、または前方宣言を回避するにはどうすればよいですか?
- スロットで参照を返すことはできますか(たとえば、ポインタをラップし、
operator.
類似したものが存在する場合はスクリプトを「オーバーライド」するクラスなど、いくつかのトリック)または - QtScriptでQVariant(A *)をAに逆参照することはできますか?
qt - JSコードがその場で変更できる「配列のような」プロパティを作成する方法は?
次のようなQObject
派生クラスがあります。
クラスには、 のリストである 1 つのプロパティが含まれますQString
。このクラスのインスタンスをスクリプトに公開する場合は、次のようにします。
ただし、Javascript コードでリストに文字列を追加しようとすると、実際には文字列が追加されません。
上記の出力は であり0
、文字列がリストに追加されなかったことを示しています。MOC で生成されたコードを詳しく調べると、プロパティcontents
にアクセスcontents()
すると、項目が追加されたリストのコピーを返す関数のみが呼び出されることがわかります。元のリストは変更されていません。
リストへの変更を永続化するにはどうすればよいですか?
c++ - Qt Qvariantlist の JavaScript 配列への変換に失敗しました
私は現在、ほとんどの部分で QML と JS を使用して Meego でアプリを作成しています。そして今、私は問題に遭遇しました。
javascript から、C++ 関数を呼び出してテキスト ファイルを読み取り、解析してから、解析結果の配列を返したいと考えています。だから私は parse() と呼ばれる Q_INVOKABLE 関数を作成し、javascript を介して呼び出します
そして、これがC++の解析関数です
悲しいことに。実行しようとすると、このような結果が得られます
C++ parse 関数がファイルを正常に解析しているように見えます。それを読み取ることができ、QVariantList に保存できます。しかし、結果をjavascript myArrayに返した後も[未定義]です。変換に何か問題がありますか?