注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

前端开发那点事儿

冒犯之处,敬请谅解。

 
 
 

日志

 
 
 
 

qml 简单 TREEVIEW  

2014-05-09 17:29:17|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
import QtQuick 2.0
import QtQuick.Window 2.0
import QtQuick.Layouts 1.0
import QtQuick.Controls 1.0
Rectangle {
   width: 600
   height: 600
   color: "black"
   ListModel {
      id: objModel
   }
   Component {
      id: objRecursiveDelegate
      Column {
         id: objRecursiveColumn
         clip: true
         MouseArea {
            width: objRow.implicitWidth
            height: objRow.implicitHeight
            onDoubleClicked: {
               for(var i = 1; i < parent.children.length - 1; ++i) {
                  parent.children[i].visible = !parent.children[i].visible
               }
            }
            Row {
               id: objRow
               Item {
                  height: 1
                  width: model.level * 20
               }
               Text {
                  text: (objRecursiveColumn.children.length > 2 ?
                           objRecursiveColumn.children[1].visible ?
                           qsTr("-  ") : qsTr("+ ") : qsTr("   ")) + model.name
                  color: objRecursiveColumn.children.length > 2 ? "blue" : "yellow"
                  font { bold: true; pixelSize: 14 }
               }
            }
         }
         Repeater {
            model: subNode
            delegate: objRecursiveDelegate
         }
      }
   }
   ColumnLayout {
      anchors.fill: parent
      ListView {
         Layout.fillHeight: true
         Layout.fillWidth: true
         model: objModel
         delegate: objRecursiveDelegate
      }
      Window {
         id: objModalInput
         modality: Qt.ApplicationModal
         visible: true
         height: 30
         width: 1000
         color: "yellow"
         TextInput {
            anchors.fill: parent
            font { bold: true; pixelSize: 20 }
            verticalAlignment: TextInput.AlignVCenter
            horizontalAlignment: TextInput.AlignHCenter
            validator: RegExpValidator {
               regExp: /(\d{1,},)*.{1,}/
            }
            onFocusChanged: {
               if(focus) {
                  selectAll()
               }
            }
            text: qsTr("ROOT,南京,海淀区_0,夫子庙_0_0,石家庄_0,齐天大圣,苏州_1,北京_1_0,哈尔滨_0")
            onAccepted: {
               if(acceptableInput) {
                  objModalInput.close()
                  var szSplit = text.split(',')

                   objModel.append({"name": szSplit[0], "level": 0, "subNode": []})

                   for(var i=1;i < szSplit.length;i++){

                       var tmpArr = szSplit[i].split('_');

                       //根节点:objModel.get(0)
                       switch(tmpArr.length){
                           case 1:
                               objModel.get(0).subNode.append({"name": tmpArr[0],"level": 1,"subNode": []})
                               break;
                           case 2:
                               objModel.get(0).subNode.get(tmpArr[1]).subNode.append({"name": tmpArr[0],"level": 2,"subNode": []})
                               break;
                           case 3:
                               objModel.get(0).subNode.get(tmpArr[1]).subNode.get(tmpArr[2]).subNode.append({"name": tmpArr[0],"level": 3,"subNode": []})
                               break;

                       }

                       //'wukong_root
//                       for(var j=0;j < objModel.count;j++){
//                           console.debug(objModel.get(j))
//                          if(objModel.get(j).name == tmpArr[1]){
//                              objModel.get(j).subNode.append({"name": tmpArr[0],"subNode": []})
//                          }
//                       }
                   }

                   return;

                   //根节点
                  if(szSplit.length === 1) {
                     objModel.append({"name": szSplit[0], "level": 0, "subNode": []})
                  }
                  else {
                      //第一个节点不存在
                     if(objModel.get(parseInt(szSplit[0])) === undefined) {
                        console.log("Error - Given node does not exist !")
                        return
                     }
                     var node = objModel.get(parseInt(szSplit[0]))

                     console.debug(node.subNode)


                     for(var i = 1; i < szSplit.length - 1; ++i) {


                        if(node.subNode.get(parseInt(szSplit[i])) === undefined) {
                           console.log("Error - Given node does not exist !")
                           return
                        }else{
                            console.debug(node.subNode.get(parseInt(szSplit[i])))
                        }

                        node = node.subNode.get(parseInt(szSplit[i]))
                     }
                     node.subNode.append({"name": szSplit[i], "level": i, "subNode": []})
                  }
               }
            }
         }
      }
      Button {
         text: "add data to tree"
         onClicked: {
            objModalInput.show()
         }
      }
   }
}


qml 简单 TREEVIEW - Diligent - PHP开发那些事儿
  评论这张
 
阅读(1122)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017