I'm using Qt 5.12.2 on Visual Studio 2019 / Win7. I wanted to make sure Q_ENUM 
works the way I think it does before updating some legacy code so I wrote a 
unit test (we use Google Test):

TestConnectEnum.h:

class tColoredObjectV3 : public QObject
{
        Q_OBJECT

public:
        enum class eColor
        {
                Red = 1,
                Blue = 2,
                Green = 3
        };
        Q_ENUM(eColor)

        tColoredObjectV3() : m_color(tColoredObjectV3::eColor::Red) {}

        void EmitColor(tColoredObjectV3::eColor color);

signals:
        void ColorSignal(tColoredObjectV3::eColor color);

private:
        eColor m_color;
};

TestEnumConnect.cpp:

TEST(Connect, ConnectEnumSucceedsV3)
{
        //qRegisterMetaType<tColoredObjectV3::eColor>();

        tColoredObjectV3 coloredObject;

        QSignalSpy spy(&coloredObject, &tColoredObjectV3::ColorSignal);
        coloredObject.EmitColor(tColoredObjectV3::eColor::Blue);

        EXPECT_TRUE(spy.isValid());
        EXPECT_EQ(spy.count(), 1); // make sure the signal was emitted exactly 
one time
        QList<QVariant> arguments = spy.takeFirst(); // take the first signal
        ASSERT_FALSE(arguments.isEmpty());
        tColoredObjectV3::eColor color = 
arguments.at(0).value<tColoredObjectV3::eColor>();
        EXPECT_EQ(tColoredObjectV3::eColor::Blue, color); // verify the first 
argument
}

But this fails - I have to uncomment the qRegisterMetaType() to get it to work. 
If I use the old Q_DECLARE_METATYPE() this works. Am I doing something wrong or 
does Q_ENUM() require this?

Tom Isaacson


_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to