3

言語選択リストの代理人がいます。リスト内の各項目には、アイコンとテキストが含まれています。コンポーネント定義を別のファイルに移動し、IMGDIR で現在定義されている文字列をプロパティとして提供したいと考えています。

以下のテキスト全体を別の LandDelegate.qml ファイルに移動し、次のように含めるだけです。

LangDelegate { id: langDlg }

動作しません。

以下は、コンポーネントの宣言です。

Component {
    id: langDlg
    Item {
        id: wrapper

        width: langView.width
        height: langImg.height+10*2

        Rectangle {
            id: background
            x: 2; y: 2; width: parent.width - x*2; height: parent.height - y*2
            color: "lightgrey"
            border.color: "orange"
            radius: 5
        }

        states: State {
            name: "Current"
            when: wrapper.ListView.isCurrentItem
            PropertyChanges { target: wrapper; x: 20 }
        }
        transitions: Transition {
            NumberAnimation { properties: "x"; duration: 200 }
        }
        MouseArea {
            anchors.fill: parent
            hoverEnabled: true
            onEntered: { wrapper.ListView.view.currentIndex = index; }
            onClicked: { wrapper.ListView.view.currentIndex = index; langSelect.visible = false; docView.visible  = true }
        }

        Row {
            id: topLayout
            x: 10; y: 10; height: langImg.height + 10*2; width: parent.width
            spacing: 10

            Image {
                id: langImg
                //width: 50; height: 50
                source: IMGDIR+licon
            }

            Column {
                width: background.width - langImg.width - 20; height: langImg.height
                spacing: 5

                Text {
                    text: lname
                    font.bold: true; font.pointSize: 16
                }
            }
        }
    }
}
4

1 に答える 1

2

私が知る限り、ドキュメントによると、

Component タイプは、基本的に、QML コンポーネントを個別の QML ファイルとしてではなく、QML ドキュメント内でインラインで定義できるようにします。

ここに、この質問に関連する詳細情報があります。

コンポーネントはインスタンス化可能な QML 定義であり、通常は .qml ファイルに含まれています。たとえば、Button コンポーネントは Button.qml で定義できます。

したがって、あなたの場合、ファイルにルート要素LangDelegate.qmlは必要ありません。の代わりにComponent使用します。ItemComponent

例:

LangDelegate.qml

import QtQuick 2.0

Item {
    id: langDlg

    width: 100
    height: 100

    Rectangle {
        id: background
        x: 2; y: 2; width: parent.width - x*2; height: parent.height - y*2
        color: "lightgrey"
        border.color: "orange"
        radius: 5
    }
}

main.qml

import QtQuick 2.5
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    LangDelegate { id: langDlg }
}
于 2016-06-24T10:32:15.877 に答える