【发布时间】:2014-02-04 13:31:12
【问题描述】:
我正在使用 QTest,并希望在我的 UI 中的一个 QML 元素上模拟鼠标点击。 换句话说,我想在我的 QML 代码中从 C++ 触发 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 项目连接起来并向它发送点击信号:
QObject::connect( this, SIGNAL( clicked() ), pItem, SLOT( onClicked() ) );
emit clicked();
我也试过这样调用:
QMetaObject::invokeMethod( pButton, "pressedChanged", Qt::DirectConnection );
pButton 是我在抓取名为 ChangeTextButtonMouseArea 的对象时得到的 QQuickItem。
我在这里发现了一些类似的问题。但不知何故,onClicked 似乎有些不同。如果我打印出从 QQuickItem 获得的 QMetaObject 中定义的所有方法,那么我找不到 onClicked 函数或 clicked 信号。
这个答案在某种程度上是正确的方向,但我要发送的信号不是我自己创建的: C++ SIGNAL to QML SLOT in Qt
我也发现了这个问题: How to simulate mouse clicks in QML? 但我只想触发特定 QML 对象的点击事件。我真的需要计算鼠标点击的坐标吗?这样做似乎有点复杂,因为 QML 项只知道与其父项的相对位置。
我在尝试一些不可能的事情吗?还是因为解决方法太明显了,所以在网上找不到答案?
【问题讨论】:
标签: c++ qt unit-testing signals qml