QQuickView: обработка событий мыши в C++

Я визуализирую свою 3D-модель под элементами управления qml, используя событие QQuickView::beforeRendering. Я хочу выполнять обработку событий мыши на С++, если пользователь щелкает за пределами любого из элементов управления qml. Как я могу узнать в QQuickView::mousePressEvent, что мышь нажата вне элементов управления qml?


person Rem    schedule 13.04.2015    source источник


Ответы (1)


Я думаю, что это проще сделать с пользовательским QQuickItem, потому что это с пользовательским QQuickView, по-видимому, означает, что вы получаете события до того, как они достигнут любого из элементов.

Вот пример:

#include <QtQuick>

class MyItem : public QQuickItem
{
public:
    MyItem() {
        setAcceptedMouseButtons(Qt::AllButtons);
    }

    void mousePressEvent(QMouseEvent *event) {
        QQuickItem::mousePressEvent(event);
        qDebug() << event->pos();
    }
};

int main(int argc, char** argv)
{
    QGuiApplication app(argc, argv);

    QQuickView *view = new QQuickView;
    qmlRegisterType<MyItem>("Test", 1, 0, "MyItem");
    view->setSource(QUrl::fromLocalFile("main.qml"));
    view->show();

    return app.exec();
}

Поместите пользовательский элемент внизу сцены, и он получит все необработанные события мыши:

import QtQuick 2.3
import QtQuick.Controls 1.0
import Test 1.0

Rectangle {
    width: 400
    height: 400
    visible: true

    MyItem {
        anchors.fill: parent
    }

    Button {
        x: 100
        y: 100
        text: "Button"
    }
}
person Mitch    schedule 13.04.2015