1.导出Person类,并且一个PersonGroup类,PersonGroup类是Person的一个组
2.具体导出过程
1.通过属性来实现,具体的请看代码
3.具体代码
// person.h #ifndef PERSON_H #define PERSON_H #include <QObject> #include <QDeclarativeListProperty> #include <QList> class Person : public QObject { Q_OBJECT Q_PROPERTY(QString name READ getName WRITE setName NOTIFY sendNameChange) Q_PROPERTY(int age READ getAge WRITE setAge NOTIFY sendAgeChange) public: explicit Person(QObject *parent = 0); QString getName(void) const; void setName(const QString& name); int getAge(void); void setAge(int age); signals: void sendNameChange(void); void sendAgeChange(void); private: QString m_Name; int m_Age; }; class PersonGroup : public QObject { Q_OBJECT Q_PROPERTY(QDeclarativeListProperty<Person> members READ members) public: explicit PersonGroup(QObject *parent = 0); QDeclarativeListProperty<Person> members(void); Q_INVOKABLE int membersCount(void) const; Q_INVOKABLE Person *member(int index) const; private: QList<Person*> m_MemberList; }; #endif // PERSON_H |
// person.cpp #include "person.h" //--------------------------------- // Person::Person(QObject *parent) : QObject(parent), m_Name("unknow"), m_Age(0) { } //--------------------------------- // QString Person::getName(void) const { return m_Name; } //--------------------------------- // void Person::setName(const QString& name) { m_Name = name; emit sendNameChange(); } //--------------------------------- // int Person::getAge(void) { return m_Age; } //--------------------------------- // void Person::setAge(int age) { m_Age = age; emit sendAgeChange(); } //--------------------------------- // PersonGroup::PersonGroup(QObject *parent) :QObject(parent) { } //--------------------------------- // QDeclarativeListProperty<Person> PersonGroup::members(void) { return QDeclarativeListProperty<Person>(this, m_MemberList); } //--------------------------------- // int PersonGroup::membersCount() const { return m_MemberList.size(); } //--------------------------------- // Person *PersonGroup::member(int index) const { return m_MemberList.at(index); } |
// main.cpp #include <QtGui/QApplication> #include <QtDeclarative/QDeclarativeView> #include <QtDeclarative/QDeclarativeEngine> #include <QtDeclarative/QDeclarativeComponent> #include "person.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); qmlRegisterType<Person>("People",1,0,"Person"); //qmlRegisterType<Person>(); qmlRegisterType<PersonGroup>("People",1,0,"PersonGroup"); QDeclarativeView qmlView; qmlView.setSource(QUrl::fromLocalFile("../UICtest/UICtest.qml")); qmlView.show(); return a.exec(); } |
// UICtest.qml import Qt 4.7 import People 1.0 //如果是qmlRegisterType<Person>(); 导出就可以注释这条 Rectangle { width: 640 height: 480 property int pgcurIndex: 0; PersonGroup{ id: group; members: [ Person { name: "A"; age: 20}, Person { name: "B"; age: 21}, Person { name: "C"; age: 22}, Person { name: "D"; age: 23}, Person { name: "E"; age: 24} ] } // 显示这份工作的一些信息 Rectangle{ x: 100; y: 100; width: 100; height: 100; Text { id: text1; text: ""} Text { id: text2; y: 20; text: ""} Text { id: text3; y: 40; text: ""} } MouseArea{ anchors.fill: parent; onClicked:{ //if (pgcurIndex < group.membersCount() - 1){ // 这里两种方法都可以 if (pgcurIndex < group.members.length - 1){ pgcurIndex++; }else{ pgcurIndex = 0; } // 显示信息 text1.text = "PersonGroup index: " + pgcurIndex; var person = group.member(pgcurIndex); text2.text = "Person name: " + person.name; text3.text = "Person age: " + person.age; } } } |
说明:
这里导出了两个类Person, PersonGroup, PersonGroup保存来一个Person的组,
我们通过导出的函数来调用类面的成员,获取成员的信息.