1. オブジェクトを動的に作成するJavaScript からオブジェクトを動的に作成する方法は 2 つあります。
動的に作成されたオブジェクトは他のオブジェクトと同じように使用できますが、QML では ID がありません。 1.1. コンポーネントを動的に作成する
1 つ目は、新しいオブジェクトの親オブジェクトです。親オブジェクトは、グラフィカル オブジェクト (つまり、Item 型) または非グラフィカル オブジェクト (つまり、QtObject 型または C++ QObject 型) のいずれかになります。グラフィックスの親を持つグラフィックス オブジェクトのみが Sprite.qml シンプルな QML コンポーネントを定義します。 QtQuick 2.0をインポートする 長方形 { 幅: 80; 高さ: 50; 色: "赤" } main.qml は、Sprite オブジェクトを作成する componentCreation.js JavaScript ファイルをインポートします。 QtQuick 2.0をインポートする 「componentCreation.js」をMyScriptとしてインポートします 矩形 { id: アプリウィンドウ 幅: 300; 高さ: 300 Component.onCompleted: MyScript.createSpriteObjects(); } コンポーネント作成.js var コンポーネント; var スプライト; 関数createSpriteObjects() { コンポーネント = Qt.createComponent("Sprite.qml"); (コンポーネントのステータス == コンポーネントの準備完了) 作成を完了します。 それ以外 コンポーネントのステータスが変更されました。接続(作成を完了)。 } 関数finishCreation() { (コンポーネントのステータス == コンポーネントの準備完了) { スプライト = component.createObject(appWindow, {x: 100, y: 100}); (スプライト == null)の場合 { console.log("オブジェクトの作成中にエラーが発生しました"); } } そうでない場合 (component.status == Component.Error) { console.log("コンポーネントの読み込みエラー:", component.errorString()); } } 相対パスを持つファイルを使用する場合、パスは 1.2. QML文字列からオブジェクトを作成するQML オブジェクトは、次の例に示すように、Qt.createQmlObject() 関数を使用して QML 文字列から作成できます。 定数 newObject = Qt.createQmlObject(` QtQuick 2.0をインポートする 矩形 { 色: 「赤」 幅: 20 高さ: 20 } `、 親アイテム、 「myDynamicSnippet」 );
QML 文字列がファイル インポートへの相対パスを使用する場合、パスは親オブジェクトを定義するファイル (メソッドの 2 番目の引数) を基準にする必要があります。 静的 QML アプリケーションを構築する場合、QML ファイルがスキャンされ、インポート依存関係が検出されます。この方法では、必要なすべてのプラグインとリソースがコンパイル時に解決されます。ただし、これは明示的なインポート ステートメント (QML ファイルの先頭にあるもの) のみを考慮し、文字列リテラルに含まれるインポート ステートメントは考慮しません。静的ビルドをサポートするには、ユーザーは、 2. オブジェクトを動的に削除する多くのユーザー インターフェイスでは、視覚オブジェクトの不透明度を 0 に設定するか、視覚オブジェクトを削除するのではなく画面外に移動するだけで十分です。 ただし、動的に作成されたオブジェクトが多数ある場合は、未使用のオブジェクトを削除するとパフォーマンスが大幅に向上する可能性があります。
アイテムは 例。 アプリケーション.qml QtQuick 2.0をインポートする アイテム { id: コンテナ 幅: 500; 高さ: 100 コンポーネント.onCompleted: { var コンポーネント = Qt.createComponent("SelfDestroyingRect.qml"); (var i=0; i<5; i++) の場合 { var オブジェクト = component.createObject(コンテナー); オブジェクト.x = (オブジェクト.幅 + 10) * i; } } } 自己破壊矩形.qml QtQuick 2.0をインポートする 矩形 { id: 長方形 幅: 80; 高さ: 80 色: 「赤」 不透明度に関する NumberAnimation { 0 まで 期間: 1000 実行中の変更: { if (!実行中) { console.log("破棄しています...") rectを破棄します。 } } } } あるいは、
また、SelfDestroyingRect インスタンスが次のように静的に作成される場合も注意してください。 アイテム { 自己破壊矩形 { // ... } } オブジェクトは動的に作成された場合にのみ動的に破棄できるため、エラーが発生します。 Qt.createQmlObject() で作成されたオブジェクトは、同様に destroy() を使用して破棄できます。 定数 newObject = Qt.createQmlObject(` QtQuick 2.0をインポートする 矩形 { 色: 「赤」 幅: 20 高さ: 20 } `、 親アイテム、 「myDynamicSnippet」 ); 新しいオブジェクトを破棄します(1000); これで、 以下もご興味があるかもしれません:
|
<<: Linux マルチスレッドにおけるフォークとミューテックス ロック プロセスの例
目次1. NFS-Ganeshaの紹介2. NFS-Ganeshaの設定3. NFS-Ganesha...
XHTML 見出しの概要Word 文書を作成するときは、「第 1 章」、「1.2.1」などのタイトル...
目次Matlab セントロイドアルゴリズムMatlab はクローズドな商用ソフトウェアであり、米国政...
目次概要Vuex の 4 つの主要オブジェクト状態の使用突然変異の使用ゲッターの使用アクションの使用...
Java を使用してシステム時間を取得し、それを MySQL データベースに保存した後、時間タイプが...
効果: <!doctypehtml> <html> <ヘッド> ...
tomcat7 のデフォルトのプログラム公開パスは tomcat/webapps/ROOT/ です。...
<br />まずアイデアを考え、次にスケッチを描き、次にマウスでスケッチし、最後にフラッ...
IE6 で CSS スタイルの div または li の背景のタイリングや境界の破壊を解決するには、...
LinuxリモートMySQLデータベースの展開、参考までに、具体的な内容は次のとおりです。 1.0 ...
目次1. 開発モードとリリースモードに異なるパッケージエントリポイントを指定する2. 外部CDNリソ...
最も一般的に使用されるレイアウト要素として、DIV は Web 開発において重要な役割を果たします。...
アリアルArial は、多くの Microsoft アプリケーションとともに配布されるサンセリフ T...
1. jdkダウンロードアドレスをダウンロードする我下載的是jdk-8u221-linux-x64....
Web ページのデザインに関する質問です。すべてに答えられるでしょうか? 1. 単一選択の質問 (...