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

时间:2017-03-21 12:35:27

标签: c++ qt qml

我正在编写一个带有返回QNetworkReply::NetworkError的方法的C ++类。我想在QML中使用这个枚举,而不仅仅将它视为一个整数,以便我可以这样做:

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

而不是

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

2 个答案:

答案 0 :(得分:5)

您需要做的就是:

在main中:

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

然后在qml:

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

QNetworkReply已包含Q_ENUM和Q_DECLARE_METATYPE宏,因此剩下的就是将其导出为QML

答案 1 :(得分:2)

一般情况下,您只需使用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) { ... }