Qt5官方demo解析集24——Extending QML - Default Property Example

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873

接上文Qt5官方demo解析集23——Extending
QML - Inheritance and Coercion Example

有时我们看到某个QML类型的声明中,某些数据并没有放在属性 + :后面,它们实际上属于这个类型的默认属性。而这个demo则向我们介绍了这个技术。

这个例子与上一篇几乎没有什么改动,除了两个小地方。

第一处在QML描述文件中example.qml:

import People 1.0

// ![0]
BirthdayParty {
    host: Boy {
        name: "Bob Jones"
        shoeSize: 12
    }

    Boy { name: "Leo Hodges" }        // 与前面不同的是,这三个Person并没有被放置在guests中
    Boy { name: "Jack Smith" }        // 但是它们的值被赋予了该类型的默认属性"guests"
    Girl { name: "Anne Brown" }
}
// ![0]

另一个地方则是我们BirthdayParty类的声明,BirthdayParty.h:

#ifndef BIRTHDAYPARTY_H
#define BIRTHDAYPARTY_H

#include <QObject>
#include <QQmlListProperty>
#include "person.h"

// ![0]
class BirthdayParty : public QObject
{
    Q_OBJECT
    Q_PROPERTY(Person *host READ host WRITE setHost)
    Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
    Q_CLASSINFO("DefaultProperty", "guests")     // Q_CLASSINFO宏用来为类添加额外的信息
public:                                          // 而这些信息可以被添加到该类的元对象信息中
    BirthdayParty(QObject *parent = 0);          // 这里为BirthdayParty类添加了一个默认属性"guests"

    Person *host() const;
    void setHost(Person *);

    QQmlListProperty<Person> guests();
    int guestCount() const;
    Person *guest(int) const;

private:
    Person *m_host;
    QList<Person *> m_guests;
};
// ![0]

#endif // BIRTHDAYPARTY_H

Qt5官方demo解析集24——Extending QML - Default Property Example

时间: 2024-10-10 08:10:36

Qt5官方demo解析集24——Extending QML - Default Property Example的相关文章

Qt5官方demo解析集25——Extending QML - Methods Example

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集24--Extending QML - Default Property Example 这个例子主要向我们介绍了在QML类型中定义函数的方法. person.h: #ifndef PERSON_H #define PERSON_H #include <QObject> class Person : public QOb

Qt5官方demo解析集30——Extending QML - Binding Example

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集29--Extending QML - Property Value Source Example 还记得我们曾经在Qt5官方demo解析集17--Chapter 3: Adding Property Bindings一文中接触过QML自定义类型的属性绑定吗?如果不记得了,可以移步进行了解.因为项目尺寸的原因,那个例子可能

Qt5官方demo解析集29——Extending QML - Property Value Source Example

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集28--Extending QML - Signal Support Example 我们经常会在QML代码中使用Animation和bindings,以使得我们的程序具有更好的动态性能.那么,类似NumberAnimation这种QML类似实际上是提供了一个算法来为属性提供动态变化的数值,或者说是提供了一个值的集合.这里

Qt5官方demo解析集28——Extending QML - Signal Support Example

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集27--Extending QML - Attached Properties Example 这个demo演示了为QML自定义类型添加信号的方法,这与Qt5官方demo解析集16--Chapter 2: Connecting to C++ Methods and Signals所介绍的差不多,鉴于例子的尺寸,可能那一篇要

Qt5官方demo解析集21——Extending QML - Adding Types Example

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 又是一个新的系列了,不过这个系列和我们之前的Chapter系列是及其相似的,但是不过呢,Chapter主要演示了如何使用C++创建具有可视性的类型以扩展我们的QML,而这个系列则关注于如何使用C++扩展QML非可视化的内容. 这里第一个小例子与Chapter的第一个小例子及其类似: person是我们自定义的C++类,然后我们将其注册为QML类型供资源

Qt5官方demo解析集26——Extending QML - Grouped Properties Example

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集25--Extending QML - Methods Example 如果之前看过了我前面介绍粒子系统的朋友,应该对 velocity: AngleDirection {angleVariation: 360; magnitude: 80; magnitudeVariation: 40} 这样的属性设置格式屡见不鲜了,它

Qt5官方demo解析集22——Extending QML - Object and List Property Types Example

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集21--Extending QML - Adding Types Example 在上一个例子中我们基于C++创建了一个自定义的QML类型,接下来,我们将该类作为另一个类的属性类型,定义了另一个birthdayparty类.这个例子与Qt5官方demo解析集19--Chapter 5: Using List Propert

Qt5官方demo解析集23——Extending QML - Inheritance and Coercion Example

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集22--Extending QML - Object and List Property Types Example 在上一个例子中,我们为BirthdayParty类创建了带有一个列表参数的属性guests,而这个列表参数的类型都是一致的,即Person.然而,使用QML的类型转换机制,我们可以使这个列表参数的类型变得不

Qt5官方demo解析集17——Chapter 3: Adding Property Bindings

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集16--Chapter 2: Connecting to C++ Methods and Signals 在C++中我们通常将用户的交互与处理函数用信号槽绑定起来,比如窗口尺寸的变化,颜色的变化等,但在QML中,我们更多的使用属性绑定来完成这些功能.我们可以将这个属性值绑定到另一个对象或者本身的属性值上,这样当后者改变时,