Qt 如何获取单击的QML元素的objectName?
我对一个相当大的QML代码库是新手,我想知道运行应用程序时单击的QML元素的属性,例如objectName 例如,本文件中的“按钮”名称 Qt中的等价物是Qt 如何获取单击的QML元素的objectName?,qt,qml,mouseevent,objectname,Qt,Qml,Mouseevent,Objectname,我对一个相当大的QML代码库是新手,我想知道运行应用程序时单击的QML元素的属性,例如objectName 例如,本文件中的“按钮”名称 Qt中的等价物是QApplication::widgetAt()或QWidget::childAt()我可以在QMouseEvent中调用 我需要这些来识别Qt/QML混合应用程序中的QML对象,用于cucumber cpp步骤实现,其中我已经有了一个Helper::click(QString名称)。我在这里举了一个示例项目:试试这个,它应该可以工作 Rect
QApplication::widgetAt()
或QWidget::childAt()
我可以在QMouseEvent中调用
我需要这些来识别Qt/QML混合应用程序中的QML对象,用于cucumber cpp步骤实现,其中我已经有了一个
Helper::click(QString名称)
。我在这里举了一个示例项目:试试这个,它应该可以工作
Rectangle {
id: item
signal qmlSignal(msg: string)
objectName: "rectangle"
MouseArea {
anchors.fill: parent
onClicked: item.qmlSignal("rectangle clicked")
onDoubleClicked: item.qmlSignal("rectangle double clicked")
onEntered: item.qmlSignal("mouse entered the rectangle")
onExited: item.qmlSignal("mouse left the rectangle")
}
}
如果这不适合您,那么您可以从QML发送一个信号,并在插槽中查找名称
我有一个解决方案,我可以使用。
首先,我在派生类中从
QQuickView
实现mousePressEvent
。然后使用
QQuickView
对象上的findChildren
,我可以找到并调试QML对象。奇怪的是,childAt
和children
没有列出QML子对象
void ClickView::mousePressEvent(QMouseEvent*ev){
QObjectList children=this->findChildren(QRegularExpression(“.+”);
for(QObject*子对象:子对象){
//仅搜索QML类型
如果(!strstrstr(child->metaObject()->className(),“_QMLTYPE”){continue;}
QVariant vX=子->属性(“x”);
qvy=子->属性(“y”);
QVariant vW=子->属性(“宽度”);
QVariant vH=子->属性(“高度”);
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()请提供一个最简单的示例,演示您想要一个答案的框架Visible QML items have a childAt()方法和按钮继承了项,所以您应该能够调用它。QML项的函数childAt
实际上相当于QWidget::childAt
。但是如果您有重叠的对象,文档说它将只返回它找到的第一个子项,而这个子项可能不是您感兴趣的。我真的很怀疑您为什么想要它是功能性的。这对我来说可能是一个问题。@JarMan我更新了描述。我需要它来识别Qt/QML混合应用程序中用于UI测试的QML对象。那么,QMLchildAt
函数是否能满足您的需要?反过来说,我没有“按钮”这个名称。这与代码objectName:“按钮”中的示例相同
抱歉,我将按钮更改为按钮
@VahagnAvagyan您的代码获取对象名
并找到指向该对象的指针。我想OP正在寻找找到对象名
@JarMan的方法谢谢您的评论,我更新了我的答案,希望它能有所帮助