本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873

又是一个新的系列了,只是这个系列和我们之前的Chapter系列是及其相似的。可是只是呢,Chapter主要演示了怎样使用C++创建具有可视性的类型以扩展我们的QML。而这个系列则关注于怎样使用C++扩展QML非可视化的内容。

这里第一个小样例与Chapter的第一个小样例及其类似:

person是我们自己定义的C++类,然后我们将其注冊为QML类型供资源文件里的example.qml使用。

person.h,这个类与之前的piechart没有太大差别:

#ifndef PERSON_H
#define PERSON_H #include <QObject>
//![0]
class Person : public QObject // 要注意的是由于这个对象并不须要可视化。我们继承最基础的QObject就能够了
{
Q_OBJECT // 由于QML组件基于元对象系统,所以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;
};
//![0]

person.cpp:

#include "person.h"

// ![0]
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;
}

example.qml:

import People 1.0

Person {                 // 非可视化组件。我们也不再须要以Item作为父对象
name: "Bob Jones"
shoeSize: 12
}

main.cpp:

#include <QCoreApplication>           // 注意到Chapter中为QGuiApplication
#include <QQmlEngine> // 提供QML组件的执行环境
#include <QQmlComponent> // 提供对QML组件的封装与訪问
#include <QDebug>
#include "person.h" int main(int argc, char ** argv)
{
QCoreApplication app(argc, argv);
//![0]
qmlRegisterType<Person>("People", 1,0, "Person"); // 注冊QML类型
//![0] QQmlEngine engine;
QQmlComponent component(&engine, QUrl("qrc:example.qml")); // 获取QML文件里的组件
Person *person = qobject_cast<Person *>(component.create()); // 创建该组件的实例化对象
if (person) {
qWarning() << "The person's name is" << person->name(); // 依旧是通过->訪问其成员函数
qWarning() << "They wear a" << person->shoeSize() << "sized shoe";
} else {
qWarning() << component.errors(); // 类型转换失败则输出错误信息
}
return 0;
}

因为没有界面。实际执行就是一行控制台的输出:

Qt5官方demo解析集21——Extending QML - Adding Types Example的更多相关文章

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

    本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集29--Extendin ...

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

    本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集27--Extendin ...

  3. Qt5官方demo分析集29——Extending QML - Property Value Source Example

    此系列的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集28--Extend ...

  4. Qt5官方demo解析集13——Qt Quick Particles Examples - Image Particles

    本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文 Qt5官方demo解析集12--Qt Quic ...

  5. Qt5官方demo解析集35——Music Player(使用winextras模块)

    本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集34——Concentr ...

  6. Qt5官方demo解析集(36个)

    http://blog.csdn.net/cloud_castle/article/category/2123873 http://blog.csdn.net/cloud_castle/article ...

  7. Qt5官方demo分析集11——Qt Quick Particles Examples - Affectors

    在这个系列中的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集10--Qt ...

  8. Qt5官方demo分析集10——Qt Quick Particles Examples - Emitters

    此系列的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 前段时间去听了Qt在北京的开发人员大会,感觉QML ...

  9. Dubbo系列(3)_官方Demo说明

    一.本文目的     通过Dubbo的官方Demo介绍,学会搭建一个简单的Dubbo程序,包括服务端.客户端.接口等. Demo地址:https://github.com/alibaba/dubbo/ ...

随机推荐

  1. javascript 知识点坑

    1. JavaScript事件属性 event.target 当目标事件发生span里面 当目标事件发生在main里面 e.target; // 目标节点DOM结构   e.target.id; // ...

  2. datagrid的基本操作-增删改

    1 ---恢复内容开始--- <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  3. VS 的winform中生成release模式

    我试过,直接在项目的"Properties"中,修改"Build"标签的"Configuration"还不行.因为之前将不常用的工具栏隐藏了 ...

  4. 完整的Ajax实例

    写在前面的话: 用了很久的Asp.Net Ajax,也看了段时间的jquery中ajax的应用,但到头来,居然想不起xmlHttpRequest的该如何使用了. 以前记的也不怎么清楚,这次就重新完整的 ...

  5. DX笔记之六------游戏画面绘图之透明特效的制作方法

    原文链接:http://blog.csdn.net/zhmxy555/article/details/7338082 透明效果 由于所有的图文件都是以矩形来储存的,我们也许会需要把一张怪兽图片贴到窗口 ...

  6. _CrtMemBlockHeader

    typedef struct _CrtMemBlockHeader{// Pointer to the block allocated just before this one:struct _Crt ...

  7. 《Hadoop权威》学习笔记五:MapReduce应用程序

    一.API的配置---Configuration类 API的配置:Hadoop提供了专门的API对资源进行配置,Configuration类的实例(在org.apache.hadoop.conf包)包 ...

  8. C#自定义Attribute值的获取与优化

    C#自定义Attribute值的获取是开发中会经常用到的,一般我们的做法也就是用反射进行获取的,代码也不是很复杂. 1.首先有如下自定义的Attribute [AttributeUsage(Attri ...

  9. Request 分别获取具有相同 name 属性表单元素值

    html 中是允许多个具有相同name属性的元素的,例如 <div> <input name="txtName" id="txtFirstName&qu ...

  10. 转载:Tomcat多数据源配置方法

    转载网址:http://blog.sina.com.cn/s/blog_53803b7b010144u5.html 关于在TOMCAT下配置多数据源,网上有很多方式,但是感觉也很混乱,俺只说俺们使用的 ...