您的位置:首页 > 编程语言 > C语言/C++

QML之QML之使用C++自定义QML类型(二)

2011-06-22 00:51 573 查看
下面的例子演示如何向利用C++自定义QML类型及自定义类型List

在Person类中用到name 和shoeSize属性,故在person.h中使用:

Q_PROPERTY(QString name READ name WRITE setName)

Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)

在BirthdayParty中类中用到Person类对象和一个以Person为元素的List对象 guests 作为属性且guests只读,故使用:

Q_PROPERTY(Person *host READ host WRITE setHost)           Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)


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


person.cpp
--------------------------------------------
#include "person.h"

Person::Person(QObject * parent) : QObject(parent), m_shoeSize(0)
{
}

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

void Person::setName(const QString &n) {
m_name = n;
}

int Person::shoeSize() const{
return m_shoeSize;
}

void Person::setShoeSize(int s) {
m_shoeSize = s;
}


birthday.h
-----------------------------------------------
#ifndef BIRTHDAYPARTY_H
#define BIRTHDAYPARTY_H

#include <QObject>
#include <QtDeclarative/QDeclarativeListProperty>
#include "person.h"

class BirthdayParty : public QObject
{
Q_OBJECT
Q_PROPERTY(Person *host READ host WRITE setHost)
Q_PROPERTY(QDeclarativeListProperty<Person> guests READ guests)

public:
BirthdayParty(QObject *parent = 0);
Person *host() const;
void setHost(Person *);
QDeclarativeListProperty<Person> guests();
int guestCount() const;
Person *guest(int) const;
private:
Person *m_host;
QList<Person *> m_guests;
};

#endif // BIRTHDAYPARTY_H


birthday.cpp
------------------------------------------
#include "birthdayparty.h"

BirthdayParty::BirthdayParty(QObject *parent) : QObject(parent), m_host(0)
{
}

Person *BirthdayParty::host() const {
return m_host;
}

void BirthdayParty::setHost(Person * c) {
m_host = c;
}

QDeclarativeListProperty<Person> BirthdayParty::guests()
{
return QDeclarativeListProperty<Person>(this, m_guests);
}

int BirthdayParty::guestCount() const
{
return m_guests.count();
}

Person *BirthdayParty::guest(int index) const
{
return m_guests.at(index);
}


main.cpp
------------------------------------------
#include <QtGui/QApplication>
#include <QDeclarativeEngine>
#include <QDeclarativeComponent>
#include <QDebug>
#include "birthdayparty.h"
#include "person.h"

int main(int argc, char ** argv)
{
QApplication app(argc, argv);

qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty");
qmlRegisterType<Person>("People", 1,0, "Person");

QDeclarativeEngine engine;
QDeclarativeComponent component(&engine, QUrl("qrc:/example.qml"));
BirthdayParty *party = qobject_cast<BirthdayParty *>(component.create());

if (party && party->host()) {
qWarning() << party->host()->name() << "is having a birthday!";
qWarning() << "They are inviting:";
for (int i = 0; i < party->guestCount(); ++i)
qWarning() << "   " << party->guest(i)->name() << party->guest(i)->shoeSize();
} else {
qWarning() << component.errors();
}

return app.exec();
}


example.qml
-----------------------------------------------
import People 1.0

BirthdayParty {
host : Person {
name: "Lavy Liu"
shoeSize: 12
}
guests: [
Person { name: "Sglaze";  shoeSize: 18},
Person { name: "liuhongwei"; shoeSize: 23},
Person { name: "liuhw"}
]
}


输出:

"Lavy Liu" is having a birthday!

They are inviting:
"Sglaze" 18
"liuhongwei" 23
"liuhw" 0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: