Придумал 2 варианта.
1) Средствами QML
У "обычных" MouseArea используем:
Javascript
hoverEnabled: true
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
У "блокирующего" MouseArea:
Javascript
cursorShape: Qt.ArrowCursor
acceptedButtons: Qt.AllButtons
hoverEnabled: true
Пример во вложении (example1.qml)
Недостаток в том, что везде надо указывать hoverEnabled, что по идее генерирует много событий. Плюс containsMouse тоже надо везде.
2) Средствами с++
Наследуемся от QQuickItem и запрещаем дальнейшую обработку событий мыши.
C++ (Qt)
class MouseBlocker: public QQuickItem
{
Q_OBJECT
public:
MouseBlocker(QQuickItem *parent = 0);
protected:
...
virtual void mouseMoveEvent(QMouseEvent *event);
...
};
...
void MouseBlocker::mouseMoveEvent(QMouseEvent *event)
{
event->accept();
}
Регистрируем
C++ (Qt)
qmlRegisterType<MouseBlocker>("aux.tools", 1, 0, "MouseBlocker");
и используем
Javascript
import aux.tools 1.0
Item {
MouseBlocker {
anchors.fill: parent
}
}
Недостаток: нужно использовать с++
Есть ли более очевидные решения? Хотелось бы все сделать только на стороне QML.
Очень странно, что нет каких-то стандартных способов.