QML与c++交互学习笔记(五)

来源:互联网 发布:阿里云的优势和劣势 编辑:程序博客网 时间:2024/06/05 14:51

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.qmlimport Qt 4.7import 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的组,

我们通过导出的函数来调用类面的成员,获取成员的信息.