我有一个 c++ 错误列表,我想将它公开给 QML。枚举是使用注册的Q_ENUM
,属性是使用注册的Q_PROPERTY
。您可以在下面查看详细信息:
class MyClass : public QObject
{
Q_OBJECT
Q_PROPERTY(QList<LoginErrorCode> loginErrors READ getLoginErrors NOTIFY loginErrorsChanged)
...
public:
...
enum LoginErrorCode {
UsernameOrPassIsNotValid
};
Q_ENUM(LoginErrorCode)
enum GetUserInfoErrorCode {
GetUserInfoError_TokenIsNotValid
};
Q_ENUM(GetUserInfoErrorCode)
QList<LoginErrorCode> getLoginErrors() const;
...
signals:
...
void loginFailed();
...
void loginErrorsChanged();
...
private:
QList<LoginErrorCode> m_loginErrors;
};
我MyClass
使用以下行注册main.cpp
:
qmlRegisterType<MyClass>("ir.MyComponents", 1, 0, "MyClass");
在 QML 中,我使用了该类:
MyClass {
id: myClass
Component.onCompleted: login("irani", "iravani");
onLoginFailed: console.log("Login failed with errors count: "+loginErrors.length);
}
输出是:
QMetaProperty::read: Unable to handle unregistered datatype 'QList<LoginErrorCode>' for property 'MyClass::loginErrors'
qrc:/main.qml:46: TypeError: Cannot read property 'length' of undefined
问题是什么?!
如何将我的枚举列表公开给 qml?
对于QQmlListProperty
文档说:
注意:QQmlListProperty 只能用于 QObject 派生对象指针的列表。