Russian Qt Forum

Qt => Qt Quick => Тема начата: folax от Сентябрь 07, 2017, 12:08



Название: Передача массива классов в Qml
Отправлено: folax от Сентябрь 07, 2017, 12:08
Добрый день, может кто то сталкивался с такой ситуацией и решил её. Мне нужно из С++ передать массив классов в Qml, и там их обрабатывать.  Делаю так.

C++

Код:
Q_INVOKABLE QVector<MyObj*> getData() { return m_aiObjects; }


main.cpp
Код:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QScopedPointer<bcGame> bcG(new bcGame);

    QQmlApplicationEngine engine;
    bcGame::declareQML();

    engine.rootContext()->setContextProperty("cppObject", bcG.data());
    engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml")));

    return app.exec();
}

QML

Код:
Connections {
        target: cppObject

        onSigDrawAi: drawObj()
    }

 function drawObj()
    {
        var dataSize = cppObject.getData();
        console.log("Data size: " + dataSize)
    }
Проблема в том что на стороне Qml он не понимает тип данных который пришел от функции.

Error: Unknown method return type: QVector<MyObj*>



Название: Re: Передача массива классов в Qml
Отправлено: MrDron от Сентябрь 07, 2017, 13:55
Код
C++ (Qt)
qmlRegisterType()


Название: Re: Передача массива классов в Qml
Отправлено: folax от Сентябрь 07, 2017, 19:20
main.cpp

Код:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QScopedPointer<bcGame> bcG(new bcGame);
    qmlRegisterType<MyObj>("com.tnkobject", 1, 0, "MyObj");

    QQmlApplicationEngine engine;
    bcGame::declareQML();

    engine.rootContext()->setContextProperty("cppObject", bcG.data());
    engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml")));

    return app.exec();
}

В main.qml добавил import com.tnkobject 1.0

Error: Unknown method return type: QVector<MyObj*>

Что то упустил ? Я возвращаю вектор классов.




Название: Re: Передача массива классов в Qml
Отправлено: MrDron от Сентябрь 08, 2017, 10:07
а так?
Код
C++ (Qt)
qmlRegisterType<QVector<MyObj*> >(...);


Название: Re: Передача массива классов в Qml
Отправлено: folax от Сентябрь 08, 2017, 11:25
Нет ошибка вылазит.

staticMetaObject' is not a member of 'QVector<MyObj*>


Название: Re: Передача массива классов в Qml
Отправлено: MrDron от Сентябрь 08, 2017, 14:57
Так не ругается:
Код
C++ (Qt)
qRegisterMetaType<QVector<MyObj*> >();