yuu
12/17/2016 - 12:01 PM

[Qiita]2016 Qt advent calendar

[Qiita]2016 Qt advent calendar

import QtQuick 2.0

Item {
    id: root
    width: 1024
    height: 768

    Rectangle {
        objectName: "rect"
        width: 1024
        height: 768
        color: "skyblue"

        Text {
            id: text
        }
    }

    function qmlFunction(value) {
        text.text = value.form.text
        text.x = value.rect.x
        text.y = value.rect.y
        text.width = value.rect.width
        text.height = value.rect.height
        console.log(value.name)

        console.log(value.rect.x)
        console.log(value.rect.width)

        console.log(value.form.text)
    }
}
#include "data.h"

#include <QGuiApplication>
#include <QQuickView>
#include <QMetaObject>

int main(int argc, char *argv[]) {
    QGuiApplication app(argc, argv);
    QQuickView view(QUrl::fromLocalFile("main.qml"));

    Data d;
    d.rect_ = QRect(50, 50, 250, 250);
    d.form_.text_ = QString("this is form text!!");

    QMetaObject::invokeMethod((QObject*)view.rootObject(), "qmlFunction",
                              Q_ARG(QVariant, QVariant::fromValue(d)));

    view.show();

    return app.exec();
}
#pragma once

#include <QObject>
#include <QString>

struct Form {
    Q_GADGET

public:
    Q_PROPERTY(QString text MEMBER text_)

    bool operator!=(const Form &rhs) { return this != &rhs; }

    QString text_;
};

Q_DECLARE_METATYPE(Form)
#pragma once

#include "form.h"

#include <QObject>
#include <QString>
#include <QRect>

struct Data {
    Q_GADGET

public:
    Q_PROPERTY(QRect rect MEMBER rect_);
    Q_PROPERTY(Form form MEMBER form_);

    QRect rect_;
    Form form_;
};

Q_DECLARE_METATYPE(Data)
TEMPLATE = app
TARGET = cpp2qml

# By default, QT contains core and gui (redefine)
QT = core gui quick

CONFIG += c++11
CONFIG -= app_bundle

MOC_DIR = .moc
OBJECTS_DIR = .obj

HEADERS += \
    data.h \
    form.h

SOURCES += \
    main.cpp

c++ to QML Data binding

.moc/
.obj/
.qmake.stash
Makefile
cpp2qml