Я хотел бы распространять событие из обработчика сигнала QML в процедуру C ++, но не знаю, как передать «объект события». Взгляните на эту ситуацию и обратите особое внимание на SomeType
,
Сначала я создаю пользовательский элемент QML со слотом, который можно вызывать из QML:
class Tool : public QQuickItem
{
. . .
public slots:
virtual void onMousePositionChanged(SomeType *event);
}
Затем в QML я создаю MouseArea
и экземпляр моего пользовательского объекта, на который я хочу распространять события.
MouseArea {
hoverEnabled: true
onPositionChanged: {
var event = . . .
tool.onMousePositionChanged(event);
}
}
Tool {
id: tool
}
И здесь есть проблема. Я не знаю, как собрать экземпляр SomeType
перейти к методу. На самом деле я не знаю, что я должен выбрать как SomeType
, В идеале это было бы QQuickMouseEvent
чтобы я мог просто позвонить tool.onMousePositionChanged(mouse)
, но по какой-то причине этот тип недоступен для использования в коде C ++.
Я также рассмотрел QMouseEvent
поэтому мне просто нужно переписать свойства, но этот класс, в свою очередь, кажется недоступным для кода QML.
Я новичок в Qt Quick, так что, возможно, я вообще неправильно его использую. Чего я хочу добиться, так это иметь эту базу Tool
класс, который имеет эти виртуальные обработчики событий для мыши и клавиатуры, а затем создает коллекцию различных инструментов, которые переопределяют их по мере необходимости. Они должны отображаться в каком-то наборе инструментов, то есть в виде сетки с иконками, из которой пользователь может выбрать текущий инструмент. Выбранный инструмент — тот, который получает события. Любые дизайнерские предложения приветствуются.
Пытаться QEvent
затем используйте event->type()
для фильтрации тип события.