我有一个解决方案,我可以使用。
首先我在mousePressEvent
派生QQuickView
类中实现。
然后findChildren<QObject*>
在QQuickView
对象上,我可以找到并调试 QML 对象。奇怪的是,childAt
并children
没有列出 QML 子对象。
void ClickView::mousePressEvent( QMouseEvent* ev ) {
QObjectList children = this->findChildren<QObject*>( QRegularExpression( ".+" ) );
for( QObject* child : children ) {
// only search for QML types
if( !strstr( child->metaObject()->className(), "_QMLTYPE_" ) ) { continue; }
QVariant vX = child->property( "x" );
QVariant vY = child->property( "y" );
QVariant vW = child->property( "width" );
QVariant vH = child->property( "height" );
if( vX.isValid() && vY.isValid() && vW.isValid() && vH.isValid() ) {
QRect rect( vX.toInt(), vY.toInt(), vW.toInt(), vH.toInt() );
if( rect.contains( ev->pos() ) ) {
qDebug() << child;
}
}
}
QQuickView::mousePressEvent( ev );
}
完整的项目在这里:
https ://github.com/elsamuko/qml_demo