I want to declare my own enum in a class in Qt and use it for signals and slots, but I get this error.
QObject::connect: Cannot queue arguments of type 'ClassA::MyEnum'
(Make sure 'ClassA::MyEnum' is registered using qRegisterMetaType().)
This is my source code:
ClassA.h
public:
enum MyEnum {
READING = 0,
STOPPED = 1,
FINISHED = 2
};
signals:
void changed(QString text, int readTextInPercent, ClassA::MyEnum status);
ClassA.cpp
emit changed(QString("string"), 50, ClassA::READING);
ClassB.h
public slots:
void changed(QString text, int readTextInPercent, ClassA::MyEnum status);
ClassB.cpp
this->connect(m_ClassA, SIGNAL(changed(QString, int, ClassA::MyEnum)), this, SLOT(changed(QString, int, ClassA::MyEnum)));
void ClassB::changed(QString text, int readTextInPercent, ClassA::MyEnum status) {
}
I don't know where and with which parameter I have to put the qRegisterMetaType.
You have to do:
Q_DECLARE_METATYPE(ClassA::MyEnum)
in your classA.h header.
Then in ClassA constructor (or main() but remember to include classa.h there first):
qRegisterMetaType<ClassA::MyEnum>("ClassA::MyEnum");
Then use like:
connect(whatever, SIGNAL(whatever_uses_myenum(ClassA::MyEnum)), ..., ...)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With