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 マルチスレッドにおけるフォークとミューテックス ロック プロセスの例
この記事では、VMware WorkstationにKylinをインストールする方法を参考までに紹介...
背景色と透明度の設定上記のように、最初の画像の場合は、灰色の背景と左上隅に白い「カバー」という文字を...
Tomcatをインストールする前に、まずJDK環境をインストールしてくださいLinux サーバー上で...
Web 開発の世界では、フレームワークは非常に一般的です。新しいフレームワークやテンプレートが毎日の...
最近の要件:グローバルロード、すべてのインターフェースはロード待機機能を表示するかどうかを手動で制御...
新しいプロジェクトは基本的に終了しました。フロントエンドとバックエンドを分離して統合を完了したのは初...
目次1. インストール環境2. インストール手順ステップ1: インストールパッケージをダウンロードす...
Gtid + Mha + Binlog サーバー構成: 1: テスト環境OS: CentOS 6.5...
Div 基本レイアウト <div class="main"> <...
目次1. 通常どのようなコンテンツを処理する必要があるか2. 基本的な考え方3. 具体的な実践の詳細...
クリックハウスの紹介ClickHouse は、SQL クエリを使用して分析データ レポートをリアルタ...
序文最近、職場でこの要件に遭遇し、リモート接続を確立するのに 1 時間以上かかりました。ローカル コ...
1. インライン参照:ラベルに直接使用されるが、メンテナンスコストが高い スタイル='フォ...
概要インデックスは、テーブル内の 1 つ以上の列に基づいて DBMS によって特定の順序で作成される...
目次1. 複雑なページデータ領域をコンポーネントにカプセル化する2. 大きな画像の使用を避ける3. ...