PavelK
@PavelK

Какие-то непонятки с Q_ENUMS и Q_INVOKABLE при наследовании, почему?

Приветствую
Допустим есть класс с перечислениями, например
class CommunicationEnums {
public:
    CommunicationEnums() {}

    enum EButtons {
        BTN_LEFT = 2,
        BTN_RIGHT = 4,        
    };
};


От него наследуется другой класс, например
class AppCore : public QObject, public CommunicationEnums
{
    Q_OBJECT
    Q_ENUMS(EButtons)
    ....... 
public:      
   Q_INVOKABLE void processButton(EButtons button);
   .......


Регистрирую его
qmlRegisterUncreatableType<AppCore>("AppCore", 2, 0, "AppCore", "Only enums");

и передаю в QML

Если в QML пишу:
console.log(AppCore.BTN_LEFT)
как и полагается, выводится 2

Но если пытаюсь вызвать функцию
appCore.processButton(AppCore.BTN_LEFT);
выводится
Error: Unknown method parameter type: EButtons


Причём, если enum { ... } перенести в AppCore, то вызов функции происходит нормально О_о
Эм, что делать и кто виноват?
  • Вопрос задан
  • 650 просмотров
Пригласить эксперта
Ответы на вопрос 1
@abukirev
C++/Qt developer/Tech Lead
1. Попробуйте зарегистрировать и само перечисление так:
Q_DECLARE_METATYPE(CommunicationEnums::EButtons)
и
qmlRegisterUncreatableType("EButtons", 1, 0, "EButtons", "Error class uncreatable");

2. На сколько помню, была такая проблема в 5.2, даже находили багу с описанием в багтрекере Qt. Суть в том, что мета-объектная система не регистрировала нормально перечисления и их приходилось дублировать в каждом классе к которому шли обращения из QML.

Какая у Вас версия Qt?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы