QML - 如何拖动ToolButton?

时间:2018-03-22 13:58:33

标签: qt qml qt5

QT文档有tutorial

我最初完全遵循它,它的确有效。然后我做了两处修改:

  1. 我用一个GridView替换了ListView(在没有#2的情况下工作)。

  2. 我尝试在Rectangle" content"中添加一个ToolButton给我的委托。像这样:

  3. Rectangle {
        id: content
    
        ToolButton {
            id: toolButton
            icon.color = "transparent"
            icon.source = "image://Loader/iconName"
        }
        Drag.active: dragArea.held
        Drag.source: dragArea
        Drag.hotSpot.x: width / 2
        Drag.hotSpot.y: height / 2
    }
    

    这不起作用,ToolButton似乎正在处理鼠标移动而不传播消息(我可以单击按钮,但我无法拖动它)?这实际上有点预期是诚实的。

    所以说,有没有人有一个很好的方法来拖动ToolButtons?或者只是接受你不能这样做?我尝试了各种Rectangles和MouseAreas的组合,但我似乎不会打破另一个(即拖动失败或按钮失败)。

1 个答案:

答案 0 :(得分:0)

您可以移动MouseArea作为ToolButton的孩子来管理pressAndHold的拖动,并传播点击以保持按钮行为:

Rectangle {
    id: content

    ToolButton {
        id: toolButton

        // bind the visual state of the button to the MouseArea
        background: Rectangle {
            color: marea.pressed
                   ? Qt.darker("blue")
                   : marea.containsMouse
                     ? Qt.lighter("blue")
                     : "blue" // use your desired colors
        }

        MouseArea {
            id: marea

            property bool held: false

            drag.target: held ? content : undefined
            drag.axis: Drag.YAxis

            anchors.fill: parent
            hoverEnabled: true
            onPressAndHold: held = true
            onReleased: held = false
            onClicked: toolButton.clicked() // propagate clicked event to the ToolButton
        }
    }
    // ...
}