Seite 1 von 1

[gelöst] QVariant und quint8*

Verfasst: 28. November 2016 12:37
von bobcat
Ich habe eine Klasse, die ein Signal versendet, das einen quint8* als Parameter enthält.

Code: Alles auswählen

signals:
    void mySignal(quint8* myParam);
Für diese Klasse schreibe ich Unittests und überwache das Signal mit einem QSignalSpy

Code: Alles auswählen

QSignalSpy mySpy(&myClass, SIGNAL(mySignal(quint8*)));
Den Inhalt meines Zeigers (->Arrays) möchte ich überprüfen. Ich extrahiere also den QVariant aus dem Signal:

Code: Alles auswählen

QVariant myParam = mySpy.takeFirst().at(0);
An dieser Stelle müsste ich einen QVariant haben, in den ein quint8* verpackt ist. Alle meine Versuche, den auszupacken, waren bisher erfolglos. Hat jemand eine Idee, wie man's machen muss?

Re: QVariant und quint8*

Verfasst: 28. November 2016 15:30
von bobcat

Code: Alles auswählen

Q_DECLARE_METATYPE(quint8*)
class MyTestClass : public QObject
{
private slots:
    void initTestCase()
    {
        qRegisterMetaType<quint8*>("quint8*");
    }
}
void testSpy()
{
    QSignalSpy mySpy(&myClass, SIGNAL(mySignal(quint8*)));
    
    // some code that causes signal to be sent
    
    QCOMPARE(spyCan.count(), 1);
    QList<QVariant> args = mySpy.takeFirst();
    QCOMPARE(args.at(0).value<quint8*>()[0], expectedBuffer[0]);
}
Der obige Code läuft bei mir. Wichtig war, den Q_DECLARE_METATYPE VOR der Testklasse aufzurufen.