2016-06-17 3 views
1

Я пытаюсь подключить MouseArea событие мыши с C++, но QQuickMouseArea является закрытым, поэтому я не смог получить сигнал.QML: вывести событие мыши MouseArea в C++

Как это:

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

Есть ли способ решить эту проблему?

И если не в состоянии, я задаюсь вопросом, почему Qt не позволяет нам получить доступ к QQuickMouseArea.

ответ

1

Вместо того чтобы слушать QQuickMouseArea сигналов, вы можете получить его в качестве QObject и установить handlerObj как event filter вашего mouseAreaObj, как это: mouseAreaObj->installEventFilter(handlerObj).

Затем вам необходимо ввести eventFilter в ваш handlerObj. Может быть что-то вроде этого:

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

Я сделал соединение в QML mouseArea.clicked.connect(cppObject.onClicked), а затем в C++ просто получил QObject*, который имеет свойства, как и ожидалось:

void CppClass::onClicked(QObject *event) { 
    qDebug() << "clicked" << event->property("x").toInt(); 
} 
Смежные вопросы