C++とQML間でデータを交換する方法を学びたいと思っています。以下のコードを考えてみましょう。one of the Qt examplesのわずかに変更されたバージョンです。QMLに値やその他の洗練された型のリストを返す方法
// example.qml
import QtQuick 2.0
import People 1.0
BirthdayParty {
host: Person {
name: "Bob Jones"
shoeSize: 12
}
guests: [
Person { name: "Leo Hodges" },
Person { name: "Jack Smith" },
Person { name: "Anne Brown" }
]
Component.onCompleted:
{ console.log(invite("William Green").name)}
}
インタフェースファイルPerson.h
は
//Person.h
#ifndef PERSON_H
#define PERSON_H
#include <QObject>
class Person : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
public:
Person(QObject *parent = 0);
QString name() const;
void setName(const QString &);
int shoeSize() const;
void setShoeSize(int);
private:
QString m_name;
int m_shoeSize;
};
#endif // PERSON_H
インターフェイスファイルbirthday.h
が
#ifndef BIRTHDAYPARTY_H
#define BIRTHDAYPARTY_H
#include <QObject>
#include <QQmlListProperty>
#include "person.h"
class BirthdayParty : public QObject
{
Q_OBJECT
Q_PROPERTY(Person *host READ host WRITE setHost)
Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
public:
BirthdayParty(QObject *parent = 0);
Person *host() const;
void setHost(Person *);
QQmlListProperty<Person> guests();
int guestCount() const;
Person *guest(int) const;
// Called from the QML side
Q_INVOKABLE Person* invite(const QString &name);
private:
Person *m_host;
QList<Person *> m_guests;
};
#endif // BIRTHDAYPARTY_H
Person
とBirthdayParty
C++のクラスはQMLに登録されてQML にさらされている両方でありますタイプシステム
qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty");
qmlRegisterType<Person>("People", 1,0, "Person");
main.cpp
(ここでは簡潔にするために貼り付けられていない)。
現在、BirthdayParty
コンポーネントが完成すると、コードは別の人物「ウィリアム・グリーン」をパーティーに「招待」します。招待方法は、名前のJavaScript側からアクセスすることができ、彼の名前は私がリストを返したい場合人の(名前は言うしかしconsole.log
、経由で印刷することがこの人、へのポインタを返しますQMLに戻ってパーティーへのすべての現在のゲストの)? thisページ 何らかの形でQVariantList
を使用する必要があります。これは正しいです?そのページは残念ながら、C++からJavascript関数を呼び出す方法について言及しています。その逆もありません。
で、短い私の質問は、Cから1 リターン洗練されたデータ型をどうするかである++ QML/JavaScriptに戻って。
あなたはQObjectのリストを公開すると、あなたのコードにすでに QQmlListPropertyを介して行われ、あなたの場合は
はあなたのための私の解決策の仕事をしましたか? – eyllanesc
はい、ありました!どうもありがとうございます! – smilingbuddha
さらに靴のサイズのためのもの –