首页 文章

如何将枚举类传递给QML?

提问于
浏览
5

我正在学习 QMLQt 并将 enum class 传递给 qml 会遇到一些麻烦 .

当我使用带有 int 参数的信号时 - 它没问题,代码工作得很好 .

但是, and here the trouble ,如果我使用带有一些 enum class 参数的信号,我在qml信号处理程序中有 undefined 值 . 我试图通过 qmlRegisterType 注册 enum class 但它不起作用 . 我将非常感谢你的帮助 .

这里的代码:

Some Helper class

class Helper : public QObject
{
    Q_OBJECT
    Q_ENUMS(Requester)
    Q_ENUMS(JANSWER)

public:

enum class Requester {
    ReqLogin,
    ReqNull,
    ReqSave,
    ReqError,
    ReqUnknown
};

enum class JANSWER {
    OK,
    Complete,
    Error,
    Unknown
};

};

main.cpp

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    qmlRegisterType<JsonPackWorker>("com.jsonpackworker", 1, 0, "JsonPackWorker");
    qmlRegisterType<Helper>("com.Helper", 1, 0, "Helper");

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

JsonPackWorker.h

class JsonPackWorker : public QObject
{
    Q_OBJECT
public:
    <...>

signals:    
    <...>
    void sendAnswer(Helper::Requester req, Helper::JANSWER answer);

public slots:
    <...>
};

Somewehere in JsonPackWorker.cpp

emit sendAnswer(Helper::Requester::ReqNull, Helper::JANSWER::OK);

main.qml

<...>
import com.jsonpackworker 1.0
import com.Helper 1.0

ApplicationWindow {
    id: mainWindow

    // Requests in answers
    property int reqLogin: Helper.ReqLogin

    <...>

    JsonPackWorker {
        id: packWorker
        <...>
        onSendAnswer: {
            // Here I've got undefined undefined if there enum class parameters
            console.log(req + " " + answer)
            switch(req) {
            case reqLogin: loginDial.checkLogin(answer)
                break;
            default:
            }
        }
    }

}

1 回答

  • 4

    问题发生在 Helper 类(感谢Qt社区) .

    class Helper {
       ...
    };
    Q_DECLARE_METATYPE(Helper::Requester)
    Q_DECLARE_METATYPE(Helper::JANSWER)
    

相关问题