首页 > 解决方案 > 在 ListView 中拖放

问题描述

我正在尝试拖放 ListView 行,但在拖动阶段遇到了麻烦。下面的代码不会拖动任何东西,并且名称列未正确对齐。我不想为 ListView 指定大小,我希望它从Row具有 id 行的内容中获取其大小。它应该能够,因为文本的大小来自其字体大小,而 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"
    }
  }
}

标签: qtlistviewdrag-and-dropqmlqt5

解决方案


推荐阅读