On 03.07.19 22:25, Tom Isaacson wrote:
No response on Qt Interest so trying here.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?
The problem is that moc only generates the code that calls qRegisterMetaType if it sees Q_DECLARE_METATYPE. Actually, it does a bit more than that. It could as well do it for Q_ENUM type, just not implemented yet.
We should consider doing it for all the types used in signals/slots/properties. But it does not do it because that could be a potential breaking change for forward declared types.
Maybe something for Qt6. -- Olivier Woboq - Qt services and support - https://woboq.com - https://code.woboq.org _______________________________________________ Development mailing list [email protected] https://lists.qt-project.org/listinfo/development
