在ListView中拖放

时间:2018-08-05 18:47:57

标签: qt listview drag-and-drop qml qt5

我正在尝试拖放ListView行,但在拖动阶段遇到麻烦。下面的代码不会拖动任何内容,并且名称列未正确对齐。我不想为ListView指定大小,而是希望它从ID为row的内容Row中获取大小。应该可以,因为文本的大小来自其字体大小,而Rectangle具有设置的宽度。 ListView可以根据需要扩大以显示名称部分。

import QtQuick 2.11
import QtQuick.Layouts 1.11

ListView {
  id: root
  height: scrollview.viewport.height

  model: listModel
  delegate: dragDelegate

  Component {
    id: dragDelegate

    MouseArea {
      id: dragArea

      anchors { left: parent.left; right: parent.right }
      height: content.height

      drag.target: pressed ? content : undefined
      drag.axis: Drag.XAndYAxis

      Rectangle {
        id: content
        anchors {
          horizontalCenter: parent.horizontalCenter
          verticalCenter: parent.verticalCenter
        }
        height: row.implicitHeight

        border.width: 1
        border.color: "lightsteelblue"
        color: "green"
        radius: 2
        states: State {
          when: dragArea.pressed

          ParentChange { target: content; parent: root }
          AnchorChanges {
            target: content
            anchors { horizontalCenter: undefined; verticalCenter: undefined }
          }
        }
        Row {
          id: row

          Text {
            text: name
            font.pointSize: 15
          }
          Rectangle {
            height: parent.height
            width: 40
            color: hexColor
          }
        }
      }
    }
  }

  ListModel {
    id: listModel
    ListElement {
      name: "first-name"
      hexColor: "red"
    }
    ListElement {
      name: "second-name"
      hexColor:  "green"
    }
  }
}

0 个答案:

没有答案