2012-03-17 22 views
2

私はこれをしばらく把握しようとしており、私は立ち往生しています。だからそこに私はいくつかのシンプルなListViewを展開すると、上の "戻る"ボタンを持つツールバーを展開しています。これは、ボタンから現在展開されている要素(主に折りたたむ)にonClickアクションをリダイレクトできるようにすることです。QML:リストビューとツールバーの "戻る"ボタン

私はそれをきれいでしょう後にいくつかのコードを投稿しますが、今のところ、これは(動作していない例)、それをすることがあります。ここでは

Rectangle { 
    id: main 
    Toolbar { 
     id: myTolbar 
     Button{ id: backButton } 
    } 
    ListModel { 
     id: myDelegate 
     ListElement { option: "OptionA" } 
     /// .... etc. 
    } 

    ListView { 
     id: myList 
     model: dataModel 
     delegate: myDelegate 
    } 
    Component { 
     id: myDelegate 
     Text{ text: option } 
     states: State{ 
      name: 'details' 
      PropertyChanges { } //some property magic 
     } 

     MouseArea { 
      onClick: state='details' 
      //!!!! here I need some help - how to "tell" backButton 
      //to change state of currently shown item back to default state ('') 
     } 
    } 
} 

答えて

2

は、可能な作業溶液

// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5 
import QtQuick 1.1 
import com.nokia.symbian 1.1 // For ToolBar and ToolButton; Replace with whatever you want 

Rectangle { 
    id: main 
    property int curSelectedIndex: -1 

    ToolBar { 
     id: myTolbar 
     anchors.top: parent.top 
     ToolButton { 
      id: backButton 
      text: "Back" 
      onClicked: { 
       if (main.curSelectedIndex != -1) { 
        dataModel.setProperty(main.curSelectedIndex, "selected", false) 
        main.curSelectedIndex = -1 
       } 
      } 
     } 
    } 
    ListModel { 
     id: dataModel 
     ListElement { option: "OptionA"; selected: false } 
     ListElement { option: "OptionB"; selected: false } 
     ListElement { option: "OptionC"; selected: false } 
     /// .... etc. 
    } 

    ListView { 
     id: myList 
     anchors {top: myTolbar.bottom; bottom: parent.bottom; right: parent.right; left: parent.left } 
     model: dataModel 
     delegate: myDelegate 
    } 
    Component { 
     id: myDelegate 
     Item { 
      height: txOption.height 
      width: myList.width 
      Text { 
       id: txOption 
       font.pointSize: 15 
       text: option 
      } 
      states: [ 
       State { 
        name: 'details'; when: model.selected 
        PropertyChanges {target: txOption; color: "red" } //some property magic 
       } 
      ] 

      MouseArea { 
       anchors.fill: parent 
       onClicked: { 
        console.debug(index + " selected") 
        if (main.curSelectedIndex != -1) 
         dataModel.setProperty(main.curSelectedIndex, "selected", false) 
        main.curSelectedIndex = index 
        dataModel.setProperty(index, "selected", true) 
       } 
      } 
     } 
    } 
} 
+0

ですありがとうございました!私はあなたのアプローチが好きです。私は相互接続のいくつかの形式について考えていましたが、QMLを使用している間は、ほとんど別の方法であなたの心を包む必要があるようです。 – yatsa

+0

QMLでは、最初に試していたように、別のコンポーネントからシグナルハンドラとしてコンポーネントを動的に取り付けることができるかどうかを考えています。もしそうでなければ、複数のサブビューを持つ複数のビュー(ListView、グリッド、カスタムスクリーンなど)と、それらの間をブラウズするための戻る/進むボタン付きのツールバーを次のレベルに移動しようとします。いくつかのビュースタックが気になりますが、私はこれを理解しなければなりません。とにかく、私が頼んでいたものにちょうど合っているので、私は自慢し、あなたの答えを受け入れない理由はありません:)再びありがとう! – yatsa

+0

問題は、AFAIKは外部からデリゲートコンポーネントを操作する方法がないことです – Koying

関連する問題