Russian Qt Forum
Ноябрь 22, 2024, 13:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не работает DropArea  (Прочитано 5057 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Июнь 19, 2019, 13:34 »

Есть вот такой QML код
Код:
Item {
    id: root
    visible: true

    ListView {
        id: lView
        orientation: ListView.Vertical
        model: visualModel
        anchors.fill: parent

        DelegateModel {
            id: visualModel
            model: itemsList

            delegate: Rectangle {
                id: listItem
                color: tapArea.held ? "lightsteelblue" : modelData.Marked ? "darkgrey" : "yellow"
                Behavior on color { ColorAnimation { duration: 100 } }

                width: lView.width
                height: 200
                border.width: 1
                border.color: "blue"

                states: State {
                    when: tapArea.held

                    ParentChange { target: listItem; parent: root }
                    AnchorChanges {
                        target: listItem
                        anchors { horizontalCenter: undefined; verticalCenter: undefined }
                    }
                }

                Drag.active: tapArea.held
                Drag.source: tapArea
                Drag.hotSpot.x: width / 2
                Drag.hotSpot.y: height / 2
                
                MouseArea {
                    id: tapArea
                    z: -1
                    anchors.fill: parent
                    onDoubleClicked: { modelData.EditedIndex = index }

                    property bool held: false
                    property int lasty: 0
                    property bool moveUp: false
                    onYChanged: { moveUp = lasty > y; lasty = y }

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

                    onPressAndHold: held = true
                    onReleased: held = false

                    DropArea {
                        anchors { fill: parent; margins: 10 }

                        onEntered: {
                            console.warn(itemName.text)
                            //visualModel.items.move(
                            //           drag.source.DelegateModel.itemsIndex,
                            //           tapArea.DelegateModel.itemsIndex )
                            //lView.currentIndex = tapArea.DelegateModel.itemsIndex + (tapArea.moveUp ? -1 : 1)
                        }
                    }
                }
            }
        }
        ScrollBar.vertical: ScrollBar{
            active: true
            width: 20
        }
    }
}
Сначала вроде работает - при удержании тапа элемент списка выделяется цветом, отлипает, двигается вверх-вниз. Однако в DropArea.onEntered выводится имя только перетаскиваемого айтема, а не того, над которым проезжает центр перетаскиваемого, как я ожидал. Почему так? Пробовал выносить DropArea из MouseArea - то же самое.

Вообще как ни делаю - вызывается onEntered только перетаскиваемого элемента списка, и только при нажатии на этот элемент.

Фуф... какое же дерьмище этот QtQuick...
« Последнее редактирование: Июнь 19, 2019, 14:59 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 22.