如何将Qt内置枚举公开给QML

How to expose Qt built-in enums to QML?

本文关键字:QML 枚举 内置 Qt      更新时间:2023-10-16

我正在使用返回QNetworkReply::NetworkError的方法编写一个C++类。我想在 QML 中使用此枚举,而不仅仅是将其视为整数,以便我可以执行以下操作:

if (myObject.error() == NetworkError.OperationCanceledError) {

而不是

if (myObject.error() == 5) {

需要做的就是:

在主要:

qmlRegisterUncreatableType<QNetworkReply>("someimport", 1, 0, "QNetworkReply", "none");

然后在 QML 中:

import someimport 1.0
...
if (myObject.error() == QNetworkReply.OperationCanceledError) {

QNetworkReply 已经包含Q_ENUM和Q_DECLARE_METATYPE宏,所以剩下的就是将其导出到 QML

一般来说,你只需要使用 Q_ENUM 宏向 QML 公开枚举,但我认为你还需要使用 qmlRegisterType 注册相关的类类型。

所以如果你做类似的事情

Q_ENUM(NetworkError) // in myclass.h
qmlRegisterType<App>("com.myapp.classes", 1, 0, "MyClass"); // in myclass.cpp

您应该能够通过以下方式访问 QML 中的枚举:

import com.myapp.classes 1.0
if (myObject.error() == MyClass.OperationCanceledError) { ... }