[英]How to pass enum class to QML?
I am on learning to QML with Qt and get some trouble with passing enum class
to qml
. 我正在学习使用Qt进行QML ,并且将
enum class
传递给qml
会遇到一些麻烦。
When I use signal with int
parameters - it's all right and code work perfectly. 当我使用带有
int
参数的信号时 - 它没问题,代码工作得很好。
But, and here the trouble , if I use signal with some enum class
parameters I have undefined
values in qml signal handler. 但是, 这里有麻烦 ,如果我使用带有一些
enum class
参数的信号,我在qml信号处理程序中有undefined
值。 I tried to register enum class
through qmlRegisterType
but it's not working. 我试图通过
qmlRegisterType
注册enum class
,但它不起作用。 I will be grateful for the help. 我将非常感谢你的帮助。
Here the code: 这里的代码:
Some Helper
class 一些
Helper
类
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 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 JsonPackWorker.h
class JsonPackWorker : public QObject
{
Q_OBJECT
public:
<...>
signals:
<...>
void sendAnswer(Helper::Requester req, Helper::JANSWER answer);
public slots:
<...>
};
Somewehere in JsonPackWorker.cpp 有些人在JsonPackWorker.cpp中
emit sendAnswer(Helper::Requester::ReqNull, Helper::JANSWER::OK);
main.qml 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:
}
}
}
}
The problem was in Helper
class (thanks to Qt community). 问题出在
Helper
类(感谢Qt社区)。
class Helper {
...
};
Q_DECLARE_METATYPE(Helper::Requester)
Q_DECLARE_METATYPE(Helper::JANSWER)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.