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

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

像这样:

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

有没有什么办法解决这个问题?

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

2个回答

4

不要监听 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;
}

1
我在qml中建立了连接:mouseArea.clicked.connect(cppObject.onClicked),然后在C++中简单地接收到了一个QObject*,其中包含了预期的属性:
void CppClass::onClicked(QObject *event) {
    qDebug() << "clicked" << event->property("x").toInt();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接