Тестовый сигнал с моим собственным классом
У меня есть некоторый класс, который может излучать некоторый сигнал с другим моим классом. Пример:
class CMyClass : public QBytaArray
{
void SomeAction();
}
class CMainClass : public QObject
{
signals:
void testSignal(const CMyClass &myClass);
public:
void test() {
CMyClass data;
emit testSignal(data);
}
}
Я написал тест Unix для CMainClass:
заголовок:
#ifndef TESTMAINCLASS_H
#define TESTMAINCLASS_H
#include <QObject>
#include <QSignalSpy>
#include "MainClass.h"
Q_DECLARE_METATYPE(CMyClass)
class CTestMainClass : public QObject
{
Q_OBJECT
public:
explicit CTestMainClass(QObject *parent = 0);
private slots:
void testS();
};
#endif // TESTMAINCLASS_H
Источник:
#include <QDebug>
#include "TestMainClass.h"
CTestMainClass::CTestMainClass(QObject *parent) : QObject(parent)
{
qRegisterMetaType<CMyClass>();
}
void CTestMainClass::testS()
{
qDebug() << "Test signal emitor";
CMainClass prc;
QSignalSpy spy(&prc, SIGNAL(testSignal(const CMyClass&)));
prc.test();
CMyClass buf = qvariant_cast<CMyClass>(spy.at(0).at(0));
}
Но в лог-файле я получил:
PASS: CTestCommandProcessor:: initTestCase () QDEBUG: CTestCommandProcessor::testS() Излучатель тестового сигнала QDEBUG: CTestCommandProcessor::testS() Количество: 1 QDEBUG: CTestCommandProcessor::testS() Vals: QVariant(CMyClass in A):\UnitTest\ встроенный UnitTest-Qt_5_7_1_5_7_1_Static-релиз \ релиз \UnitTest.exe. Время функции: 0 мс Общее время: 0 мс
Я пытался изменить строку:
CMyClass buf = qvariant_cast
(spy.at(0).at(0));
в
CMyClass buf = qvariant_cast
(spy.at(0).at(0));
Но я получаю ту же ошибку. Что случилось? Могу ли я использовать в единицах измерения Qt свои собственные классы?
1 ответ
Мне так жаль, это мое плохо. Я использовал метод takeFirst() шпиона. И после этого объекта шпиона больше нет сигналов.