Как передать событие «нажатие» мыши другому объекту, которое создается только после срабатывания события «нажатие»

#qt #qml

Вопрос:

Установив значение «propagateComposedEvents» в значение true, вы сможете передать событие мыши в уже присутствующую под областью мыши область. Но есть ли способ, которым, если мы нажмем на область прямой мыши, то RectB будет создан из этой точки в разделе RectA и передаст событие «нажата» мышь в RectB.

 import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow{
    id: applWindow
    visible: true
    width: 300
    height: 300
    x:100
    y:100
    

    Loader{
        id: loader
    }

    Component{
        id: rectBComponent
        Rectangle{
            id:rectB
            color:"green"
            width: 50
            height: 50
            z: -1  // to create rectB below the rectA

            Component.onCompleted:{console.log("rectB created")}

            MouseArea{
                id:rectBMouseArea
                anchors.fill: parent
                onPressed:console.log("rect B recevied press event") // handler to receive the press event
            }
        }
    }

    Rectangle{
        id:rectA
        color:"red"
        width: 50
        height: 50

        MouseArea{
            id: rectAMouseArea
            anchors.fill: parent
            propagateComposedEvents: true
            onPressed:{
                console.log("mouse clicked on rectA")
                loader.sourceComponent = rectBComponent // create rectB when rectA is pressed
                if(loader.status == Loader.Ready)
                {
                    loader.item.x = rectA.x
                    loader.item.y = rectA.y
                    loader.item.width = rectA.width
                    loader.item.height = rectA.height
                    console.log("passing the mouse event")
                    mouse.accepted = false // not accept mouse event and pass it to below object
                }
            }
        }
    }
}

 

Пожалуйста, уточните, могу ли я передать событие мыши другому объекту, который создается после запуска события мыши.

Комментарии:

1. Вы уверены, что новый объект будет создан вовремя?

2. Мероприятие уже прошло !! Ваш вопрос не ясен ? вы хотите, чтобы rect b получал только событие ??

3. @JarMan,Да, новый объект создается вовремя. Чтобы подтвердить это, я добавил сообщение для печати, и созданное сообщение сначала печатается, а затем печатается сообщение о «прохождении события мыши».

4. @MohammadKanan, да, я хочу, чтобы rectB получал событие мыши при нажатии на rectA. Но в тот момент, когда я нажимаю на rectA, rectB вообще не был создан.

5. @MohankumarChar , RecB , безусловно, создан, получает клики по фокусу и журналам событий, похоже, у вас есть еще одна проблема, связанная с тем, как вы запускаете свое приложение. Код, как указано выше, создает rectB и получает события.