MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
QMLの基礎 - カスタムQMLタイプのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
QMLの基礎 - カスタムQMLタイプ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == 設計者は、既存のQMLタイプを使用して、独自の機能を追加したカスタムQMLタイプを作成することができる。<br> <br> カスタムQMLタイプは、コンポーネントと呼ぶこともある。<br> コンポーネントとは、複数のQMLタイプをまとめて1つのQMLタイプとして扱う仕組みである。<br> <br> カスタムQMLタイプ以外にも、Componentタイプを使用してコンポーネントを作成することができる。<br> <br><br> == カスタムQMLタイプの作成 == # Qt Creatorを起動して、[ファイル]メニューバー - [New File...]を選択する。 # 次に、[New File]ダイアログの左ペインにある[Qt] - 右ペインにある[QMLファイル(Qt Quick 2)]を選択する。 # 作成するQMLファイル名を入力して、[次へ]ボタンを押下する。 # [プロジェクト管理]画面にある[完了]ボタンを押下する。 <br> QMLファイル名には、英数字や<code>_</code>(アンダーバー)が使用できる。<br> <u>ただし、ファイル名の1文字目は大文字のアルファベットで始まる必要がある。</u><br> <br> <u>もし、カスタムQMLファイルがQtプロジェクトのトップディレクトリと異なるディレクトリに存在する場合、該当ディレクトリを<code>import</code>する必要がある。</u><br> <syntaxhighlight lang="qml"> import "<カスタムQMLファイルが存在するディレクトリの相対パスまたは絶対パス>" </syntaxhighlight> <br> カスタムQMLファイルがQtプロジェクトのトップディレクトリに存在する場合は省略できる。<br> <br><br> == カスタムQMLタイプの例 == 以下の例では、押下するたびに乱数を発生させて、テキストに乱数値を表示するカスタムQMLタイプを作成および使用している。<br> なお、カスタムQMLファイル名は"CustomItem.qml"として、Qtプロジェクトのトップディレクトリに配置している。<br> <syntaxhighlight lang="qml"> // CustomItem.qmlファイル import QtQuick 2.15 import QtQuick.Controls 2.15 Row { Button { id: btn text: "Click" function onClicked() { textvalue.text = Math.random() } } Text { id: textvalue text: "0" } } </syntaxhighlight> <br> <syntaxhighlight lang="qml"> // main.qmlファイル import QtQuick 2.15 import QtQuick.Window 2.15 Window { visible: true width: 640 height: 480 Column { CustomItem { height: 50 } CustomItem { height: 50 } CustomItem { height: 50 } } } </syntaxhighlight> <br><br> == コンポーネントの作成 == まず、カスタムQMLタイプを作成する。<br> # Qt Creatorを起動して、[ファイル]メニューバー - [New File...]を選択する。 # 次に、[New File]ダイアログの左ペインにある[Qt] - 右ペインにある[QMLファイル(Qt Quick 2)]を選択する。 # 作成するQMLファイル名を入力して、[次へ]ボタンを押下する。 # [プロジェクト管理]画面にある[完了]ボタンを押下する。 <br> カスタムQMLファイル名には、英数字や<code>_</code>(アンダーバー)が使用できる。<br> <u>ただし、ファイル名の1文字目は大文字のアルファベットで始まる必要がある。</u><br> <br> コンポーネントは、以下に示すいずれかの手順により、オブジェクトを動的に生成することができる。<br> * <code>Loader</code>タイプを使用する。 * <code>Component</code>タイプの<code>createObject</code>関数を使用する。 <br> オブジェクトを必要に応じて生成する場合、または、パフォーマンス性からオブジェクトを不必要に削除したくない場合等に使用する。<br> <br><br> == コンポーネントの例 == ==== Loaderタイプを使用する場合 ==== <code>Loader</code>タイプは、カスタムQMLファイルを読み込み、オブジェクトを動的に生成することができる。<br> カスタムQMLファイルのオブジェクトを生成するには、<code>source</code>プロパティにカスタムQMLファイルのパスを指定する。<br> <br> 生成したオブジェクトを削除する場合は、<code>source</code>プロパティを空に指定する。<br> <br> <code>Loader</code>タイプは<code>Item</code>タイプを継承しているため、<code>x</code>プロパティ、<code>y</code>プロパティ、<code>anchors</code>プロパティを使用して、<br> 動的に生成したカスタムQMLファイルのオブジェクトのレイアウトを設定することができる。<br> デフォルトの<code>x</code>プロパティおよび<code>y</code>プロパティの値は、<code>0</code>であるため、そのオブジェクトは左上に表示される。<br> <syntaxhighlight lang="qml"> // main.qmlファイル import QtQuick 2.15 import QtQuick.Window 2.15 Window { visible: true width: 640 height: 480 MouseArea { anchors.fill: parent function onClicked() { pageLoader.source = "CustomItem.qml" } } Loader { id: pageLoader } } </syntaxhighlight> <br> ==== ComponentタイプのcreateObject関数を使用する場合 ==== <br><br> == ダイアログの例 == ダイアログは、カスタムQMLタイプとして定義することができない。<br> ただし、<code>Window</code>タイプまたは<code>ApplicationWindow</code>タイプを定義したカスタムQMLタイプを、<code>createComponent</code>関数を使用して読み込むことにより実現できる。<br> <br> また、ダイアログから戻り値を取得する場合は、カスタムQMLタイプに<code>property</code>を定義して、<code>Connections</code>タイプから取得する。<br> <syntaxhighlight lang="qml"> // main.qmlファイル import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 // ...略 Button { text: "Popup MessageDialog" onClicked: { var component = Qt.createComponent("MessageDialog.qml"); if (component.status === Component.Ready) { var messageDialog = component.createObject(parent, {someValue1: 1, someValue2: 2}); messageDialogConnection.target = dlg messageDialog.show(); } } Connections { id: messageDialogConnection onVisibleChanged: { if(!target.visible) { console.log(target.returnValue); } } } // ...略 </syntaxhighlight> <br> <syntaxhighlight lang="qml"> // MessageDialog.qmlファイル import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 ApplicationWindow { property int someValue1: 0 property int someValue2: 0 property int returnValue: 0 id: messageDialog title: "Some Title" width: 600 height: 450 flags: Qt.Dialog modality: Qt.WindowModal onVisibleChanged: { messageDialogBtnCancel.focus = true } ColumnLayout { id: messageColumn width: parent.width spacing: 20 Label { text: "Some Message" width: parent.width font.pointSize: 12 wrapMode: Label.WordWrap horizontalAlignment: Label.AlignHCenter verticalAlignment: Label.AlignVCenter Layout.fillWidth: true Layout.fillHeight: true Layout.topMargin: 20 Layout.bottomMargin: 20 } RowLayout { x: parent.x width: parent.width Layout.alignment: Qt.AlignHCenter Layout.bottomMargin: 20 spacing: 20 Button { id: messageDialogBtnOK text: "OK" Connections { target: messageDialogBtnOK function onClicked() { returnValue = 0 messageDialog.close() } } } Button { id: messageDialogBtnCancel text: "Cancel" focus: true Connections { target: messageDialogBtnCancel function onClicked() { returnValue = 1 messageDialog.close(); } } } } } } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Qt]]
QMLの基礎 - カスタムQMLタイプ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse