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

QML: Fetch mouse event of MouseArea in C++

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

像这样:

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

有什么办法可以解决吗?

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

而不是收听 QQuickMouseArea 信号,您可以将其作为 QObject 并将您的 handlerObj 设置为 mouseAreaObjevent filter,例如这:mouseAreaObj->installEventFilter(handlerObj).

然后您需要在 handlerObj 中实施 eventFilter。 也许是这样的:

bool HandlerObject::eventFilter(QObject* obj, QEvent* event)
{
    if (event->type() == QEvent::MouseButtonRelease)
        return handleEvent(static_cast<QMouseEvent*>(event));
    else
        return false;
}

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

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