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

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

大家好,又见面了,我是全栈君。

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

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

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

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

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


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115745.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java-jdk8下载及安装

    java-jdk8下载及安装转载自:https://www.cnblogs.com/chenxj/p/10137221.html1、下载JDK;a、直接官网下载:http://www.oracle.com/;b、或百度网盘

    2022年7月1日
    25
  • 卡尔曼(Kalman)滤波算法原理、C语言实现及实际应用

    卡尔曼(Kalman)滤波算法原理、C语言实现及实际应用文章目录卡尔曼滤波一、滤波效果展示二、简介三、组成1.预测状态方程(1)目的:(2)方程:(3)备注2.预测协方差方程(1)目的(2)方程(3)备注3.卡尔曼增益方程(1)目的(2)方程(3)备注4.跟新最优值方程(卡尔曼滤波的输出)(1)目的(2)方程(3)备注5.更新协方差方程(1)目的(2)方程(3)备注四、C程序代码实现1.参数列表2.代码实现(一维数据滤波)五、发送波形到…

    2022年6月13日
    206
  • transactionscope mysql_TransactionScope 的基本原理简介

    transactionscope mysql_TransactionScope 的基本原理简介C#的事务编程1Db事务DbConnection中创建基于当前连接的DbTransaction2使用TransactionScope,创建环境事务一旦创建,在这个环境包含的DbConnection实例都会根据连接字符串中的Sqlserver连接字符串支持,是否自动附加当前环境事务.连接字符串关键字(Enlist)SqlConnection.ConnectionString属性…

    2022年7月19日
    14
  • java 正则表达式详细讲解和全面案例,和根据正则筛选需要内容「建议收藏」

    java 正则表达式详细讲解和全面案例,和根据正则筛选需要内容「建议收藏」java 正则表达式详细讲解和全面案例,和根据正则筛选需要内容

    2022年4月23日
    55
  • Python,PyCharm,Anaconda三者间的关系[通俗易懂]

    Python,PyCharm,Anaconda三者间的关系[通俗易懂]1.Python:解释性脚本语言,提供人机对话的解释工作。2.PyCharm:用来写Python代码的工具,是一种集成开发环境(IDE)。在这种环境下可进行可视化地代码程序编写工作。3.Anaconda:Python自身缺少一些包(如:NumPy,Scipy),需要在cmd终端输入pipinstallnumpy安装包。Anaconda内置了许多第三方库,是一个基于Python的数据处理和科学计算平台。…

    2022年8月27日
    5
  • Python之抽象基类建议收藏

    抽象基类的核心定义在abc模块中,模块中包括了创建抽象基类需要的修饰符和元类型abc.ABCMeta用来生成抽象基础类的元类。由它生成的类可以被直接继承。abc.ABC辅助类,让你可以不用关心元类

    2021年12月19日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号