問題タブ [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 - QWebFrame javascript の QObject 所有権の設定
addToJavaScriptWindowObject インターフェイスを介して QWebFrame JavaScript 環境に存在する QObject があります。この QObject には、javascript 内で使用されるより多くの QObject ポインター (ファクトリーなど) を返す Q_INVOKABLE メソッドがあります。Qt は、これらの QObject ポインターを、呼び出し元の JavaScript 環境で呼び出すことができるオブジェクトに自動的に変換します。
問題は、JavaScript にこの QObject の所有権を引き継がせたいということです。現在の動作では、C++ 環境が所有権を保持します。
QObject ファクトリ オブジェクトが QScriptEngine オブジェクトへのポインタを保持し、QScriptEngine::newQObject と QScriptEngine::ScriptOwnership 引数を使用して新しいオブジェクトを作成する、過去に QScriptEngine を直接扱ってきました。これは完全に機能します。しかし、QWebFrame JavaScript エンジンの場合、エンジンは QWebFrame 内に埋め込まれており、アクセスできません。
QObject を QWebFrame JavaScript 環境に戻し、JavaScript にそのオブジェクトの所有権を与えるにはどうすればよいですか?
qt - Qtでクラスをスクリプト可能かつシリアライズ可能にする方法は?
2 つの基本的な特性を持つクラスを作成しようとしています。
Q_INVOKABLE
スクリプト可能である必要があります。クラスには、スクリプトに公開される、修飾された多数のプロパティとメソッドが含まれています。qRegisterMetaTypeStreamOperators()
sに格納するために登録できるように、シリアライズ可能である必要がありますQVariant
。
私が知る限りQObject
、クラスをスクリプト可能にするには、から派生させる必要があります。ただし、クラスを に登録するには、クラスqRegisterMetaTypeStreamOperators()
にデフォルトのコピー コンストラクターが必要なようです。これは、QObject
派生クラスにはないものです。
両方の目標を達成する方法はありますか?
c++ - スクリプト経由で呼び出される C++ 関数からオブジェクト インスタンスを呼び出す
シングルトンデザインパターンを使用するJellyfishという名前のクラスがあります:
クラゲ.h
クラゲ.cpp
main.cpp でテストを行っても、エラーは発生しません。
main.cpp
Jellyfish
しかし、外部QScriptファイルでいくつかの静的メソッドを使用したい:
クラゲ.h
クラゲ.cpp
最後に、解析されたスクリプト:
問題
アプリケーションを実行すると、getInstance()
常に新しい Jellyfish インスタンスが作成されます。しかし、実際の問題は、debug( qDebug() << "test";
) を使用した出力で、アプリケーションJellyfish::getInstance();
がsgmentation fault
.
誰かがこれを理解するのを手伝ってくれますか?
qt - QWidgetを変更せずにスタイルシートでタブの背景を定義しますか?
タブ、テキスト領域など、非常に基本的な GUI を作成したいと考えています。
しかし、タブに色を付けて、MAC、Windows、および Linux で常に同じように表示したいと考えています。
だから、私はスタイルシートを使用しようとしました:
しかし、タブがよく見える場合でも、問題があります: タブ ペインはまだ透明です...
以下を追加することで、背景色を強制できます。
しかし、ご存知のように、これはすべてのウィジェットの背景色を変更します。QPlainTextEdit でさえ、背景を白にしたいのです。さらに面倒なことに、これは OS のスキンをリセットし、醜いスクロールバーを表示します (私は本当にそのままにしておきたいのです)。
すべてのコンポーネントのスキンを変更せずに、タブ ペインの背景を変更する方法はありますか?
c++ - 呼び出し不可能な機能へのQMLアクセス
Q_INVOKABLEまたはQ_SLOTSとしてマークされていない関数にアクセスする必要があります。Qtスクリプトモジュールには、defaultPrototypeと呼ばれるメカニズムがあります。QMLで可能かしら?
QtDevDaysがQtDD12を発表しているのを見ました-内部でQtQuick-ThomasMcGuireと18分でThomasは純粋なQMLウィジェットアプリケーションを示しています。呼び出し不可能な関数をスクリプト環境にエクスポート/公開しないと、それを達成できないと思います。
QtScriptのdefualtPrototypeのようなQMLのメカニズムはありますか?
qt - QtScriptからパブリックスロットにアクセスできません
私はこのクラスを持っています:
メソッドは次のように定義されます。
ドキュメントに記載されているように、ヘッダーファイルで以前に定義されたパブリックスロットにアクセスしようとしています。
http://doc.qt.digia.com/qt/scripting.html#making-ac-object-available-to-scripts-written-in-qtscript
test.jsファイルは、ドキュメントの例と同じように、次のようになります。
しかし、私は何も得ていません。JavaScriptオブジェクトが見つからないようです。私は何が欠けていますか?
簡単なことをする
うまく動作します。
編集: qt4Webページの例はQ_PROPERTYを実装しています。私はこれを試しましたが、同じ結果が得られました:
編集1:次のように初期化子を実装しようとしました:
まだ何も...
編集2:いくつかの例はあまりにも継承しQScriptable
ます:
しかし、それでも違いはありません。
javascript - QtScript で HTML を解析しますか?
シナリオは次のとおりです。QtNetwork モジュールを使用して、インターネットから html ページを取得します。
昔は、新しい QWebPage オブジェクトを作成し、setHtml()
関数を使用してそれをロードし、解析 (特定のタグと属性を検索) するだけでしたが、それでは不十分に見えました。
今、私は QtScript を介してそれを行うことができると思います。入力として QByteArray を与え、ページを解析し、いくつかの要素と属性を取得しますが、javascript 構文を使用します。
つまり、昔は foreach ループを追加していましたが、今では C++ コードではなく、純粋な jsを使用して同様のことQWebElement::findFirst()
を行いたいと考えています。getElementByID
それは可能ですか?もしそうなら、誰でもコードの例を挙げてもらえますか? Qt 4.8.4を実行しています
または、QWebElement スタイルの解析を回避できるものは何でも。
javascript - QtScriptコードをプロファイリングする方法は?
FirebugやChromeの開発者ツールなどの純粋なJavaScriptコードをプロファイリングするツールがあることは知っていますが、QTScriptをプロファイリングするための優れたツールがあるかどうかを知りたいです。または、これらのツールを使用してQtScriptコードのプロファイルを作成するにはどうすればよいですか。
このユースケースは、ほとんどのコードがJavaScriptで記述され、一部のコードがネイティブQT /C++で記述されているデスクトップアプリがある場合です。そのシナリオで、誰かがパフォーマンスをプロファイリングしたい場合、プロファイリングを自動化できるツールは何ですか。
c++ - クラスを QScriptEngine に追加する
クラスのインスタンスを QScriptEngine に追加する方法の例を次に示します。
これはすべて正常に機能しますが、次のようにスクリプトで新しい Rectangles を作成できるようにしたいと考えています。
それ、どうやったら出来るの?