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的组,
我们通过导出的函数来调用类面的成员,获取成员的信息.
- QML与c++交互学习笔记(五)
- QML与c++交互学习笔记
- QML与c++交互学习笔记(一)
- QML与c++交互学习笔记(二)
- QML与c++交互学习笔记(三)
- QML与c++交互学习笔记(四)
- QML与c++交互学习笔记(七)
- QML与c++交互学习笔记
- QML与c++交互学习
- QML与c++交互学习笔记(六) 关于qt c++中创建对象,QML获取此对象数据问题
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- QML与c++交互学习笔记(六) 关于qt c++中创建对象,QML获取此对象数据问题
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- lua 与 C交互 学习笔记
- QML与C++交互
- QML与c++交互
- QML与C++交互
- QML与C++交互
- QML与c++交互学习笔记(三)
- Android2.2源代码中关于生成图片缩略图的一个bug
- QML与c++交互学习笔记(四)
- 项目管理工具-Redmine
- 看到新的CSDN的博客界面,泪流满面
- QML与c++交互学习笔记(五)
- postfix sasl身份验证
- QML与c++交互学习笔记(六) 关于qt c++中创建对象,QML获取此对象数据问题
- QML与c++交互学习笔记(七)
- warning: do not list domain haha.com.cn in BOTH mydestination and virtual_mailbox_domains
- 项目管理工具-Jira
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- Joomla源代码解析(六) JDocument 类的几个常用的方法
- 透过 Linux 内核看无锁编程