Распространение событий QML на C++

Я хотел бы распространять событие из обработчика сигнала 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 класс, который имеет эти виртуальные обработчики событий для мыши и клавиатуры, а затем создает коллекцию различных инструментов, которые переопределяют их по мере необходимости. Они должны отображаться в каком-то наборе инструментов, то есть в сетке с иконками, из которой пользователь может выбрать текущий инструмент. Выбранный инструмент - тот, который получает события. Любые дизайнерские предложения приветствуются.

1 ответ

Пытаться QEventзатем используйте event->type() для фильтрации типа события.

Другие вопросы по тегам