Лучший способ имитировать нажатие кнопки qml в C ++? - PullRequest
0 голосов
/ 07 января 2019

Моя основная задача - написать контрольный пример, который может имитировать нажатие кнопки 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";
    }
}

1 Ответ

0 голосов
/ 07 января 2019

Мне кажется, это работает:

QObject* obj = view.findChild<QObject*>("button");

QEvent evtPress(QEvent::MouseButtonPress);
QEvent evtRelease(QEvent::MouseButtonRelease);

obj->event(&evtPress);
obj->event(&evtRelease);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...