如何将枚举类传递给QML? [英] How to pass enum class to QML?

查看:264
本文介绍了如何将枚举类传递给QML?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在通过 Qt 学习 QML ,并通过枚举类 qml

I am on learning to QML with Qt and get some trouble with passing enum class to qml.

当我使用 int 参数的信号 - 正确和代码工作完美。

When I use signal with int parameters - it's all right and code work perfectly.

但是,如果我使用一些枚举类的信号参数我在qml信号处理程序中有 undefined 值。我试图通过 qmlRegisterType 注册枚举类,但它不工作。我将非常感谢您的帮助。

But, and here the trouble, if I use signal with some enum class parameters I have undefined values in qml signal handler. I tried to register enum class through qmlRegisterType but it's not working. I will be grateful for the help.

这里的代码:

一些 助手

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:
    <...>
};

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:
            }
        }
    }

}


推荐答案

问题出在 Helper class(感谢Qt社区)。

The problem was in Helper class (thanks to Qt community).

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

这篇关于如何将枚举类传递给QML?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆