Qt在课堂上自己的枚举

Nik*_*las 2 c++ enums qt signals-slots

我想在Qt中的类中声明我自己的枚举并将其用于信号和插槽,但是我得到了这个错误.

QObject::connect: Cannot queue arguments of type 'ClassA::MyEnum'
(Make sure 'ClassA::MyEnum' is registered using qRegisterMetaType().)
Run Code Online (Sandbox Code Playgroud)

这是我的源代码:

ClassA.h

public:
    enum MyEnum {
        READING = 0,
        STOPPED = 1,
        FINISHED = 2
    };

signals:
    void changed(QString text, int readTextInPercent, ClassA::MyEnum status);
Run Code Online (Sandbox Code Playgroud)

ClassA.cpp

emit changed(QString("string"), 50, ClassA::READING);
Run Code Online (Sandbox Code Playgroud)

ClassB.h

public slots:
    void changed(QString text, int readTextInPercent, ClassA::MyEnum status);
Run Code Online (Sandbox Code Playgroud)

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) {

}
Run Code Online (Sandbox Code Playgroud)

我不知道在哪里以及我必须使用哪个参数qRegisterMetaType.

小智 5

你必须做:

Q_DECLARE_METATYPE(ClassA::MyEnum)

在你的classA.h头文件中.

然后在ClassA构造函数(或main()中,但请记住首先包含classa.h):

qRegisterMetaType<ClassA::MyEnum>("ClassA::MyEnum");

然后使用像:

connect(whatever, SIGNAL(whatever_uses_myenum(ClassA::MyEnum)), ..., ...)