Russian Qt Forum
Март 28, 2024, 23:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача массива классов в Qml  (Прочитано 5082 раз)
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*>

Записан
MrDron
Гость
« Ответ #1 : Сентябрь 07, 2017, 13:55 »

Код
C++ (Qt)
qmlRegisterType()
Записан
folax
Гость
« Ответ #2 : Сентябрь 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*>

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


Записан
MrDron
Гость
« Ответ #3 : Сентябрь 08, 2017, 10:07 »

а так?
Код
C++ (Qt)
qmlRegisterType<QVector<MyObj*> >(...);
Записан
folax
Гость
« Ответ #4 : Сентябрь 08, 2017, 11:25 »

Нет ошибка вылазит.

staticMetaObject' is not a member of 'QVector<MyObj*>
Записан
MrDron
Гость
« Ответ #5 : Сентябрь 08, 2017, 14:57 »

Так не ругается:
Код
C++ (Qt)
qRegisterMetaType<QVector<MyObj*> >();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 20.