Ошибка QSignalSpy: при подключении сигнала к QSignalSpy такого сигнала нет.

Я пытаюсь протестировать приложение Qt, использующее QML. В частности, я хочу проверить связь между сигналом, излучаемым объектом QML, и слотом в классе C++.

Вот соответствующий код, с которым я работаю:

      QQuickView view;
view.setSource(QUrl("qrc:/QML/monitoring/MonitoringMenu.qml")); // Path to the QML file
QQuickView view2;
view2.setSource(QUrl("qrc:/QML/monitoring/MonitoringAction.qml")); // Path to the QML file
QObject *object = view.rootObject();
QObject *object2 = view2.rootObject();

// Get the InspirationPausePanel object created in the QML file
QQuickItem *InspirationPausePanel = static_cast<QQuickItem*>(object->children().at(2));
Q_ASSERT(InspirationPausePanel != nullptr);

// Before clicking, check that the visible property is set to false
QCOMPARE(InspirationPausePanel->property("visible").toBool(), false);

// Get the InspirationPauseItem object created in the QML file
QQuickItem *InspirationPauseItem = static_cast<QQuickItem*>(object2->children().at(0));
Q_ASSERT(InspirationPauseItem != nullptr);

QObject::connect(object2, SIGNAL(actionClicked()), object2, SLOT(onActionClicked()));

// Connect the "actionClicked" signal of InspirationPauseItem to a QSignalSpy
QSignalSpy spy(object2, SIGNAL(actionClicked));
QVERIFY2(spy.isValid(), "signal not connected");

// Simulate a mouse click on the InspirationPauseItem object
QMetaObject::invokeMethod(InspirationPauseItem, "click");

// Check that the visible property of InspirationPausePanel is set to true
QCOMPARE(InspirationPausePanel->property("visible").toBool(), true);`

Однако, когда я запускаю тест, я получаю следующую ошибку:

      QWARN  : MainwindowTest::clickButtonTest() QSignalSpy: No such signal: 'actionClicked'
FAIL!  : MainwindowTest::clickButtonTest() 'spy.isValid()' returned FALSE. (signal not connected)
..`/FHF_App/mainwindowtest.cpp(76) : failure location

Похоже,actionClickedсигнал не распознается. Пожалуйста, может ли кто-нибудь помочь мне понять, что я делаю неправильно?

1 ответ

Для тех, кто тоже наткнулся на этот вопрос, хочу сказать, что все гораздо проще. Вам просто нужен сигнал от C++, чтобы иметь аргументы QVariant. Например:

      QSignalSpy spy(object2, SIGNAL(actionClicked(QVariant)));

Мой сигнал объявляется следующим образом:

      signal actionClicked(var actionMode)
Другие вопросы по тегам