QML:C 中的Mousearea的事件

QML: Fetch mouse event of MouseArea in C++

本文关键字:事件 Mousearea 中的 QML      更新时间:2023-10-16

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

这样:

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

有什么方法可以解决此问题?

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

而不是收听QQuickMouseArea信号,您可以将其作为QObject获得,并将handlerObj设置为mouseAreaObj的事件过滤器,例如: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();
}