QML:在C ++中获取MouseArea的鼠标事件

时间:2016-06-17 02:56:45

标签: c++ qt qml qtquick2

我正在尝试将MouseArea鼠标事件与C ++连接,但QQuickMouseArea是私有的,所以我无法获取信号。

像这样:

QObject::connect(mouseAreaObj, SIGNAL(released(QMouseEvent*)),
                 handlerObj, SLOT(handleEvent(QMouseEvent*)));

有什么方法可以解决这个问题吗?

如果不能,我想知道为什么Qt不允许我们访问QQuickMouseArea

2 个答案:

答案 0 :(得分:2)

而不是收听QQuickMouseArea信号,您可以将其设为QObject并将handlerObj设置为mouseAreaObj mouseAreaObj->installEventFilter(handlerObj),如下所示: handlerObj

然后,您需要在bool HandlerObject::eventFilter(QObject* obj, QEvent* event) { if (event->type() == QEvent::MouseButtonRelease) return handleEvent(static_cast<QMouseEvent*>(event)); else return false; } 中实施event filter。 也许是这样的:

theano

答案 1 :(得分:1)

我在qml mouseArea.clicked.connect(cppObject.onClicked)中建立了连接,然后在C ++中只收到一个QObject*,它具有预期的属性:

void CppClass::onClicked(QObject *event) {
    qDebug() << "clicked" << event->property("x").toInt();
}