本系列全部文章能够在这里查看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. [Protractor] Getting Started With Protractor

    Protractor is an end-to-end testing library for AngularJS. Install: npm install -g protractor This w ...

  2. 【SSH三框架】Struts2第六章的基础:他们拦截函数的定义

    干web当然,需要做的事情时,项目管理登录身份验证及其他权利.假设我们必须使用相应的登陆,未经允许是不可能的. 因此,我们需要使用拦截器,拦截功能struts2它集成.当然,有可能在Spring正在使 ...

  3. php实现文件夹下的文件读取功能

    <?php //这里实现 某个文件下的全部图片,并列出来! header("Content-type:text/html;charset=utf8");   $handle= ...

  4. HDU4612(Warm up)2013多校2-图的边双连通问题(Tarjan算法+树形DP)

    /** 题目大意: 给你一个无向连通图,问加上一条边后得到的图的最少的割边数; 算法思想: 图的边双连通Tarjan算法+树形DP; 即通过Tarjan算法对边双连通缩图,构成一棵树,然后用树形DP求 ...

  5. DataGrid( 数据表格) 组件[9]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  6. (转)SQL Server 2005附加2008的数据库

    1. 生成for 2005版本的数据库脚本  2008 的manger studio  -- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例  -- 右键要转到2005 ...

  7. C#--对象的相等比较

    对象相等比较机制对于引用类型的变量和值类型的变量来说是不同的,下面分别介绍引用类型和值类型的相等比较. 首先来看System.Object的部分定义: public class Object { // ...

  8. tomcat启动报错总结

    错误一 webapps\ROOT does not exist or is not a readable directory 错误原因:在tomcat的server.xml的context中配置了不存 ...

  9. 乱七八糟 Nodejs 系列一:试水

    看Nodejs比较舒服的人,个人认为主要是: 以前是后端,转成前端的人: 前端巨牛的人: 后端巨牛的人: 巨牛的人... 当然还有我这种,脑抽不止的人~~ 不过学习的过程中发现,如果不是上来就用exp ...

  10. 阿里大鱼simplexmlelement object 取值PHP

    SimpleXMLElement Object(    [code] => 15    [msg] => Remote service error    [sub_code] => ...