模拟QTest中点击的QML元素
Simulate clicked QML element from QTest
我正在玩QTest,希望在测试中模拟鼠标点击UI中的一个QML元素。所以换句话说,我想从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项连接起来,并向其发送点击信号:
QObject::connect( this, SIGNAL( clicked() ), pItem, SLOT( onClicked() ) );
emit clicked();
我也尝试过以下方式调用:
QMetaObject::invokeMethod( pButton, "pressedChanged", Qt::DirectConnection );
其中pButton是当我获取名为ChangeTextButtonMouseArea的对象时得到的QQuickItem。
我在这里发现了一些类似的问题。但不知何故,onClicked似乎有些不同。如果我打印出从QQuickItem获得的QMetaObject中定义的所有方法,那么我找不到onClicked函数或点击的信号。
这个答案在一定程度上是正确的,但我想发送的信号不是我自己创建的:Qt 中QML插槽的C++信号
我还发现了这个问题:如何在QML中模拟鼠标点击?但我只想在一个特定的QML对象上触发一个点击事件。我真的需要计算鼠标点击的坐标吗?这样做似乎有点复杂,因为QML项目只知道与父母的相对位置。
我在尝试一些不可能的事情吗?还是因为解决方案太明显,我在互联网上找不到任何答案?
void ClickItem( QQuickItem* pItem, QWindow* pRootWindow )
{
auto oPointF = pItem->mapToScene( QPoint( 0, 0 ) );
auto oPoint = oPointF.toPoint();
oPoint.rx() += pItem->width() / 2;
oPoint.ry() += pItem->height() / 2;
QTest::mouseClick( pRootWindow, Qt::LeftButton, Qt::NoModifier, oPoint );
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 从C++实例化QML
- 如何在 QML 中访问基于 QObjectList 的模型中的某些元素
- 使用动态创建的选项卡元素在C 和QML之间绑定
- 将元素附加到C 的QML ListModel
- 如何在 c++ 中从文件创建自定义 QML 元素
- QML元素ID访问从C 访问
- 用C 动态添加/插入QML元素
- 模拟QTest中点击的QML元素
- 从C++访问列表元素 (QML) 颜色
- 刷新元素列表视图 QML
- 如何在ListModel中添加元素后更新QML ListView
- 如何从 QDeclarativeView 获取指向某个 qml 元素的指针
- QML:如何创建半透明/半透明的WebView元素
- 顶级qml文件中的Repeater元素导致QtQuick 1.1(QtCreator 3.5.1)中的绑定循环
- 为Qt QML中的许多Text元素指定字体
- 将大字符串的逗号分隔子字符串转换为QML中的可变数组元素
- QML文本元素上的dataChanged
- 从 QT 中的C++代码访问 QML 元素
- 在Qt 5.0中将QAbstractListModel元素属性暴露给QML