我有一個C++中的錯誤列表,我想將它公開給QML。 Enum使用Q_ENUM
註冊,並使用Q_PROPERTY
註冊。你可以看到下面的詳細信息:如何將C++中的枚舉從C++公開到QML?
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;
};
,我使用main.cpp
以下行註冊MyClass
:
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的衍生 對象指針列表。
這個效果很好,謝謝。正如文件中所建議的,儘可能避免變體。那麼你有沒有其他替代方法將枚舉列表公開給QML? –
@ S.M.Mousavi如有可能。就你而言,你可以使用'QVariantList'。否則,您可以使用'QList'並輕鬆地將您的枚舉值來回轉換。如果你給它一個機會,讓我知道它是否有效,我將整個答案與這個評論。 ;-) –
skypjack