#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 и получает события.