0

あるqmlレイアウトから別のqmlにボタンをクリックしたときにメソッドをロードするにはどうすればよいですか?編集プロファイルボタンがあるので、ボタンをクリックすると、Webサービスから取得した値を表示したいという意味になります。これを行う方法は?誰かがアイデアを送ることができますか?ありがとう

4

3 に答える 3

2

Webサービスから取得したデータをあるQMLビューから別のビューに渡そうとしているようです。を使用しcreateObject()て.qmlファイルからUI画面を作成し、新しい画面(ページ)をナビゲーションペインのビュースタックにプッシュするナビゲーションペイン。データは、新しく作成されて表示されるページのUIにアクセスできます。私が思うより具体的な説明、そしてこれを行うための一般的な方法。

データを渡すには、「profileview」QMLページのルートオブジェクト(ページ、コンテナ)でプロパティを宣言します。次に、ボタンの関数の最初のQMLファイルで、QML定義onClicked()の結果を変数に割り当てます。createObject()次に、この変数を使用して、「profileview」ページのプロパティにデータを割り当てることができます。ボタンは次のようになります。

// Assume you have a Navigation Pane called navPane
// You also have to define a component for your QML file
Button {
  text: "View profile"
  onClicked: {
    var profilePage = profileDefinition.createObject();
    profilePage.myData = webserviceData;
    navPane.push(profilePage);
  }
  attachedObjects: [
    ComponentDefinition {
      id: profileDefinition
      source: "profilePage.qml"
    }
  ]
}

ナビゲーションペインカスケードサンプルプロジェクトに基づくより詳細な完全な例を以下に示します。

main.qml

// Navigation pane project template
import bb.cascades 1.0

NavigationPane {
id: navPane

// This property holds and tracks the created profile page
property Page profilePage

/* This property holds some sample webservice data, in practice 
 * you would load this from the webservice
 */
property variant webserviceData: {
    "name": "John Doe",
    "email": "john.doe@stackoverflow.com",
    "twitter": "@johndoe"
}
Page {
    // page with a button to display profile
    Container {
        layout: DockLayout {
        }
        Label {
            horizontalAlignment: HorizontalAlignment.Center
            verticalAlignment: VerticalAlignment.Top
            text: webserviceData.name
        }
        Button {
            horizontalAlignment: HorizontalAlignment.Center
            verticalAlignment: VerticalAlignment.Center
            text: qsTr("Show Profile")
            onClicked: {
                // show detail page when the button is clicked
                profilePage = profileDefinition.createObject();
                profilePage.myProfileData = webserviceData;
                navPane.push(profilePage);
            }
            attachedObjects: [
                ComponentDefinition {
                    id: profileDefinition
                    source: "profilePage.qml"
                }
            ]
        }
    }
}
onPopTransitionEnded: {
    // Clean up any pages that have been popped, to avoid memory leaks
    if (profilePage == page) {
        page.destroy();
    }
}
}

profilePage.qml

// Navigation pane project template
import bb.cascades 1.0

Page {

/* Our data property
 * Note: A variant is a QVariant Qt type, so it can easily handle different 
 * data types, in our case it is a map.
 * Without the braces to denote that it is an object you will get a TypeError
 * from QML at runtime 
 */
property variant myProfileData: { /*empty object*/ }

// page with profile details
paneProperties: NavigationPaneProperties {
    backButton: ActionItem {
        onTriggered: {
            // Pop this page off the stack and go back
            navPane.pop();
        }
    }
}
Container {
    Label {
        text: qsTr("Profile Page")
        horizontalAlignment: HorizontalAlignment.Center
        textStyle {
            base: SystemDefaults.TextStyles.TitleText
            color: Color.Blue
        }
    }
    Label {
        text: "Name:"
        horizontalAlignment: HorizontalAlignment.Left
    }
    TextField {
        text: myProfileData.name
        horizontalAlignment: HorizontalAlignment.Center
    }
    Label {
        text: "Email:"
        horizontalAlignment: HorizontalAlignment.Left
    }
    TextField {
        text: myProfileData.email
        horizontalAlignment: HorizontalAlignment.Center
    }
    Label {
        text: "Twitter:"
        horizontalAlignment: HorizontalAlignment.Left
    }
    TextField {
        text: myProfileData.twitter
        horizontalAlignment: HorizontalAlignment.Center
    }
}
}

うまくいけば、それはあなたを動かすのに役立ちます。また、GitHubのこれらのサンプルプロジェクトは次の場合に役立ちます。

https://github.com/blackberry/Cascades-Samples/tree/master/quotes

https://github.com/blackberry/Cascades-Samples/tree/master/weatherguesser

于 2013-01-23T02:56:44.187 に答える
2

このonCreationCompletedメソッドを実装する必要があります

    onCreationCompleted: {
   // call the function, that you need to show first
   // first_display()
   }

お役に立てれば。!!!

于 2013-03-18T07:12:56.920 に答える
1

私があなたを正しく理解しているなら、あなたはボタンをクリックしたときに行動を起こしたいと思うでしょう。これを行うには、QMLのオブジェクトにonClickedメソッドを追加します。Button例:

Button {
    text: "View profile"
    onClicked: {
        myProfileInfo.visible = true;
    }
}

Label {
    id: myProfileInfo
    text: "This is my profile"
    visible: false
}
于 2012-12-10T22:59:15.310 に答える