LINUX.ORG.RU

C++ model + QML = segmentation fault

 , ,


0

1

Моя модель:


// human.h

#include <QObject>
#include <QString>

class Human : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString name READ name DESIGNABLE false SCRIPTABLE false CONSTANT FINAL)

public:
    explicit Human(const QString &name, QObject *parent = 0);

    QString name() const { return m_name; }
    
private:
    const QString m_name;
};

// human.cpp

#include "human.h"

Human::Human(const QString &name, QObject *parent) :
    QObject(parent), m_name(name)
{
}

Тут написано, что передавать C++ объекты в контекст qml можно следующим образом:

// main.cpp
#include <QApplication>
#include "qmlapplicationviewer.h"

#include <QList>
#include "human.h"
#include <QDeclarativeContext>

Q_DECLARE_METATYPE(QList<Human*>)

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

    QList<Human*> dn;
    dn.append(new Human("Vasya"));
    dn.append(new Human("Dasha"));
    dn.append(new Human("Petya"));
    dn.append(new Human("Masha"));

    QmlApplicationViewer viewer;
    QDeclarativeContext* ctx = viewer.rootContext();
    ctx->setContextProperty("humans", QVariant::fromValue(dn));

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

    return app->exec();
}
// main.qml

import QtQuick 1.0

Rectangle {
    width: 360
    height: 360

    ListView {
        width: parent.width
        height: parent.height
        model: humans
        delegate: Rectangle {
            height: 25
            width: 100
            Text { text: model.modelData.name }
        }
    }
}

При выполнении qml кода программа крашится.

Наверняка кто-нибудь уже сталкивался с этим. Как правильно организовать межязыковое взаимодействие?

QList<QObject*> dn;
anonymous
()

SCRIPTABLE false надобно убрать

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

спасибо за ссылку, почему же она мне в гугле раньше не попалась

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