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 マルチスレッドにおけるフォークとミューテックス ロック プロセスの例
以前、あるプロジェクトでMysql FIND_IN_SET関数を使用したことがありますが、非常に便利...
レンダリングBlog Gardenでよく使われるスタイル /*タイトル h1 h2 h3 スタイル*...
はじめに: すべてのデータを 1 つのテーブルに保存することのデメリット表の構成構造は複雑で不明瞭で...
1. イベントバブリング: JavaScript イベント伝播のプロセスでは、要素でイベントがトリガ...
ログイン dockerログインdocker login コマンドを実行し、ユーザー名、パスワード、メ...
今日仕事中に、ビジネス側から次のような質問をされました。テーブルがあり、一意のフィールドを追加する必...
JS のクラスの定義や継承は本当に多様なので、別のノートブックを開いて記録しておきます。意味オブジェ...
序文日常の開発では、テキストの水平スクロール効果(一般にカルーセルと呼ばれる)によく遭遇します。これ...
前回、Taobaoの詳細ページを分析した後(クリックして表示)、ショッピングモールの基本テンプレート...
私はいつも、なぜMySQLデータベースのtimestampタイムゾーンの問題を無視できるのか疑問に思...
1. 環境整備CentOS Linux リリース 7.5.1804 (コア)インストールフォルダを作...
目次質問解決質問この問題には多くの理由があるようです。私の問題は、パラメータ付きのURLを更新できな...
目次序文Toastコンポーネントをカプセル化する方法ユースケース具体的な実装要約する序文ビジネスが発...
この記事では、例を使用して、MySQL クエリ ステートメントの簡単な操作を説明します。ご参考までに...