Моя основная задача - написать контрольный пример, который может имитировать нажатие кнопки qml из C ++. Приведенный ниже фрагмент кода выполняет это, но для него требуется qobject_cast()
от qobject до qwindow. Есть ли возможность реализовать щелчок мышью, который принимает qobject? Это правильный способ реализации нажатия кнопки или есть лучший способ?
main.qml
файл
import QtQuick 2.11
import QtQuick.Controls 2.2
import QtQuick.VirtualKeyboard 2.2
import QtQuick.Window 2.11
ApplicationWindow {
id: window
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Button {
id: button
objectName: "button"
x: 54
y: 118
text: qsTr("Button")
checkable: true
onClicked: {
button.text = qsTr("Clicked")
}
}
}
myClass.h
файл
...
public:
void ClickItem(QObject*);
private slots:
void test_case1();
private:
QWindow *m_window;
...
myClass.cpp
файл
void myClass::ClickItem(QObject* pItem)
{
int x = pItem->property("x").toInt();
int y = pItem->property("y").toInt();
QPoint location(x, y);
QTest::mouseClick(m_window, Qt::LeftButton, Qt::NoModifier, location);
}
void myClass::test_case1()
{
QObject *engine;
QQmlComponent component(&engine, QUrl(QStringLiteral("qrc:../app/Display.qml")));
object = component.create();
m_window = qobject_case<QWindow *>(object);
QObject *item = object->findChild<QObject*>("button");
if (item) {
myClass::ClickItem(item);
QVariant value = item->property("text");
QCOMPARE(value.toString(), QString("Clicked"));
} else {
qDebug() << "Did not work";
}
}