如何将枚举类传递给 QML
How to pass enum class to QML?
我正在学习使用Qt进行QML,并且在将enum class
传递给qml
时遇到了一些麻烦。
当我使用带有int
参数的信号时 - 没关系,代码工作完美。
但是,这里的麻烦是,如果我使用带有一些enum class
参数的信号,我在 qml 信号处理程序中undefined
值。我试图通过qmlRegisterType
注册enum 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
};
};
主.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);
主.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++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 当在基类中定义枚举时,qml中的Q_ENUM未定义值
- 如何将Qt内置枚举公开给QML
- 如何将枚举类传递给QML
- 如何将枚举的Qlist从C 曝光到QML
- 在 QML 中使用 c++ 枚举作为字符串
- 如何将枚举类传递给 QML
- 枚举类型作为QML的C++类中的属性类型
- 如何从QML访问枚举
- 在Qt c++中枚举QML属性
- 在QML信号中公开枚举