gpt4 book ai didi

c++ - 如何将枚举类传递给 QML?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:27 51 4
gpt4 key购买 nike

我正在学习使用 Qt 来学习 QML,但在将 enum class 传递给 qml 时遇到了一些麻烦。

当我将信号与 int 参数一起使用时 - 一切正常,代码运行完美。

但是,问题来了,如果我将信号与一些enum class 参数一起使用,我在qml 信号处理程序中有未定义 值。我尝试通过 qmlRegisterType 注册 enum class 但它不起作用。我将不胜感激。

这里是代码:

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

JsonPackWorker.cpp 中的某处

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

ma​​in.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 类中(感谢 Qt 社区)。

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

关于c++ - 如何将枚举类传递给 QML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37415542/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com