У меня есть список ошибок в C++, и я хочу показать его в QML. Enum регистрируется с использованием Q_ENUM
, а имущество регистрируется с использованием Q_PROPERTY
. Вы можете увидеть подробности ниже:Как вывести Qlist из перечислений с 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;
};
и я зарегистрировал 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-производных объектных указателей.
Это хорошо работает, спасибо. Как указано в документации, следует избегать варианта, когда это возможно. Итак, есть ли у вас какой-либо другой альтернативный способ опубликовать список перечислений в QML? –
@ S.M.Mousavi Когда это возможно. В вашем случае вы можете просто пойти с 'QVariantList'. В противном случае вы можете использовать, вероятно, 'QList' и легко конвертировать назад и вперед ваши значения перечисления. Если вы дадите ему шанс, дайте мне знать, если это сработает, и я буду интегрировать ответ с этим комментарием. ;-) –
skypjack