#qml #qt-quick
#qml #qt-быстрый
Вопрос:
Как мне обнаружить щелчки вне Window {} в QML?
Rectangle {
id: topLevel
height: 400; width: 400
Window {
id: windowObj
color: "blue"
height: 200; width: 200
onActiveChanged { console.trace(); visible = false; }
}
Component.onCompleted: windowObj.visible = true
}
Предположим, я нажимаю на какую-то часть topLevel
снаружи windowObj
.
onActiveChanged
работает на Windows, но не на MAC.
{Using: QtQuick 2.1, QtQuick.Window 2.1, QML/Qt 5.2.0}
Ответ №1:
Поместите область мыши в прямоугольник верхнего уровня и дайте событию пройти
Rectangle {
id: topLevel
MouseArea{
anchors.fill : topLevel
propagateComposedEvents : true
onClicked : console.log("clickoutside");
}
Window {
id: windowObj
color: "blue"
height: 200; width: 200
onActiveChanged { console.trace(); visible = false; }
}
}
Комментарии:
1. Я хочу избежать этого. Я в основном хочу, чтобы это окно было выпадающим списком моего пользовательского списка. Он должен закрываться всякий раз, когда за его пределами происходит какое-либо нажатие мыши — даже за пределами самого приложения или в строке заголовка и т. Д. Затем мне нужно зафиксировать все события и посмотреть, какое из них должно закрыть my
Window {
} и т. Д. Знаете ли вы какой-либо другой / лучший способonActiveChanged
, который отлично работает в ОС Windows?2. другой способ — добавить обработчик событий в сам контейнер qml, например, QtQuick2ApplicationViewer из Qt, независимо от того, в каком qml запущен. добавьте функцию eventfilter и, если ваши условия для внешнего клика совпадают, отправьте событие в ваш qml.