[Qt-interest] Register metatype in multiple namespaces
Jean-Olivier Racine
joracine at humancad.com
Wed Jun 10 19:22:31 CEST 2009
Hi there,
I am trying to connect two objects which are in different namespaces
with a signal/slot which take Q_FLAGS as an argument. But it seems the
MOC gets things all confused... Whatever I try, I can't seem to get that
connection working.
Here`s a minimal example to reproduce the problem.
_*Include file*_:
namespace Test
{
class MyClass : public QObject
{
Q_OBJECT;
Q_FLAGS(MyFlags);
public:
enum MyFlag
{
Flag01 = 0x01,
Flag02 = 0x02
};
Q_DECLARE_FLAGS(MyFlags, MyFlag);
void Go()
{
emit MySignal(Flag01);
}
signals:
void MySignal(MyFlags f);
};
}
Q_DECLARE_OPERATORS_FOR_FLAGS(Test::MyClass::MyFlags);
Q_DECLARE_METATYPE(Test::MyClass::MyFlags);
class MySlotClass : public QObject
{
Q_OBJECT;
public slots:
void MySlot(Test::MyClass::MyFlags f)
{
qDebug("MySlot");
}
};
_*Source file*_:
int TypeID = qRegisterMetaType<Test::MyClass::MyFlags>("MyFlags");
int main(int argc, char *argv[])
{
QApplication App(argc, argv);
Test::MyClass A;
MySlotClass B;
// The below 4 connects fail
// --------------------------
// Object::connect: No such slot MySlotClass::MySlot(MyFlags) in
..\..\src\main.cpp:56
QObject::connect(&A, SIGNAL(MySignal(MyFlags)), &B,
SLOT(MySlot(MyFlags)));
// QObject::connect: Incompatible sender/receiver arguments
// Test::MyClass::MySignal(MyFlags) -->
MySlotClass::MySlot(Test::MyClass::MyFlags)
QObject::connect(&A, SIGNAL(MySignal(MyFlags)), &B,
SLOT(MySlot(Test::MyClass::MyFlags)));
// Object::connect: No such signal
Test::MyClass::MySignal(Test::MyClass::MyFlags) in ..\..\src\main.cpp:58
QObject::connect(&A, SIGNAL(MySignal(Test::MyClass::MyFlags)), &B,
SLOT(MySlot(MyFlags)));
// Object::connect: No such signal
Test::MyClass::MySignal(Test::MyClass::MyFlags) in ..\..\src\main.cpp:59
QObject::connect(&A, SIGNAL(MySignal(Test::MyClass::MyFlags)), &B,
SLOT(MySlot(Test::MyClass::MyFlags)));
A.Go();
return(App.exec());
}
What I am missing?
Thanks!
J-O
More information about the Qt-interest-old
mailing list