LINUX.ORG.RU

QML + C++ enums + inheritance == undefined

 , , ,


0

4

Что-то в qml с наследованием не то.
Базовый класс:

#include <QObject>

class Human : public QObject
{
    Q_OBJECT
    Q_ENUMS(Gender)

public:
    Human() : QObject() {}

    enum Gender {
        Male,
        Female
    };
};

Дочерний класс:

#include "human.h"

class Female : public Human
{
    Q_ENUMS(Brain)
public:
    enum Brain {
        Smart,
        Stupid
    };

    Female() : Human() {}
};
Регистрация типов и запуск qml view
#include <QApplication>
#include "qmlapplicationviewer.h"

#include "female.h"

#include <qdeclarative.h>

Q_DECL_EXPORT int main(int argc, char *argv[])
{
    QScopedPointer<QApplication> app(createApplication(argc, argv));

    qmlRegisterType<Female>("factory.inc.models", 1, 0, "Female");

    QmlApplicationViewer viewer;
    viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
    viewer.setMainQmlFile(QLatin1String("qml/test/main.qml"));
    viewer.showExpanded();

    return app->exec();
}

Место использования

import QtQuick 1.0

import factory.inc.models 1.0

Rectangle {
    width: 360
    height: 360

    Component.onCompleted: {
        console.log(Female.Male); // 0
        console.log(Female.Female); // 1

        console.log(Female.Smart); // undefined
        console.log(Female.Stupid); // undefined
    }
}

Почему же undefined?

class Female : public Human

{ Q_ENUMS(Brain) public: enum Brain { Smart, Stupid };

Female() : Human() {} };

Сексизьм какой-то!

lispfuerimmer
()
Ответ на: комментарий от anonymous327

Когда добавляю макрос, получаю compile error.

Без Q_OBJECT и мета-информации не будет работать и Q_ENUMS(Brain), оттуда и undefined в QML. Чините ошибку линковки, а именно добавьте заголовочник Female в список целей moc.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Чините ошибку линковки

Вы правы. Проблема оказалась в старых make-файлах (Clean all в креаторе по прежнему их не удаляет)

И что характерно, с точностью воспроизвелась проблема в тестовом проекте (см. первый пост)

anonymous327
() автор топика
Ответ на: комментарий от anonymous327

Проблема оказалась в старых make-файлах (Clean all в креаторе по прежнему их не удаляет)

Странно, а у меня всё удаляет. Может дело не в креаторе?

alexku
()
Ответ на: комментарий от alexku

Может дело не в креаторе?

А в чём ещё? mingw?

У меня креатор версии 2.6.2, набор утилит для сборки mingw 4.4

anonymous327
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.