我正在使用QTest并希望在我的UI中模拟鼠标单击测试,触发其中一个QML元素上的onClicked信号处理程序。
换句话说,我想从C ++触发我的QML代码中的onClicked信号处理程序?这是我的QML外观:
import QtQuick 2.0
Rectangle
{
objectName: "MessageRectangle"
width: 360
height: 360
Text
{
objectName: "MessageText"
text: qsTr("Hello World")
anchors.centerIn: parent
}
Rectangle
{
id: simplebutton
objectName: "ChangeTextButton"
color: "grey"
width: 150; height: 75
Text
{
id: buttonLabel
anchors.centerIn: parent
text: "button label"
}
MouseArea
{
id: buttonMouseArea
objectName: "ChangeTextButtonMouseArea"
anchors.fill: parent
onClicked:
{
CppApi.setMessage( "Button Clicked" );
}
}
}
}
我尝试了很多不同的解决方案,但是有一种方式是连接一个从QObject派生出来的自己的类和QML项并向其发送click信号:
QObject::connect( this, SIGNAL( clicked() ), pItem, SLOT( onClicked() ) );
emit clicked();
我也尝试了以下方式来调用:
QMetaObject::invokeMethod( pButton, "pressedChanged", Qt::DirectConnection );
当我抓取名为ChangeTextButtonMouseArea的对象时,pButton是我获得的QQuickItem。
我在这里找到了一些类似的问题。但是,某种程度上,onClicked似乎有所不同。如果我打印出从QQuickItem获取的QMetaObject中定义的所有方法,那么我找不到onClicked函数或clicked信号。
这个答案有点正确,但我想发送的信号并不是由我自己创建的: C++ SIGNAL to QML SLOT in Qt
我还发现了这个问题: How to simulate mouse clicks in QML? 但我只想在特定的QML对象上触发点击事件。我真的需要计算鼠标点击的坐标吗?这样做似乎有点复杂,因为QML项目仅知道相对于其父项的位置。
我试图尝试一些不可能的事情吗?还是我找不到答案的原因是解决方案非常明显?
QWindow
? - Halfgaarqobject_cast<QQuickWindow *>(_qml.rootContext())
-其中QQmlApplicationEngine _qml
。 - susundberg