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类型供资源文件里的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的更多相关文章
- Qt5官方demo解析集30——Extending QML - Binding Example
本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集29--Extendin ...
- Qt5官方demo解析集28——Extending QML - Signal Support Example
本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集27--Extendin ...
- Qt5官方demo分析集29——Extending QML - Property Value Source Example
此系列的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集28--Extend ...
- Qt5官方demo解析集13——Qt Quick Particles Examples - Image Particles
本系列全部文章能够在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文 Qt5官方demo解析集12--Qt Quic ...
- Qt5官方demo解析集35——Music Player(使用winextras模块)
本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集34——Concentr ...
- Qt5官方demo解析集(36个)
http://blog.csdn.net/cloud_castle/article/category/2123873 http://blog.csdn.net/cloud_castle/article ...
- Qt5官方demo分析集11——Qt Quick Particles Examples - Affectors
在这个系列中的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 接上文Qt5官方demo解析集10--Qt ...
- Qt5官方demo分析集10——Qt Quick Particles Examples - Emitters
此系列的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 前段时间去听了Qt在北京的开发人员大会,感觉QML ...
- Dubbo系列(3)_官方Demo说明
一.本文目的 通过Dubbo的官方Demo介绍,学会搭建一个简单的Dubbo程序,包括服务端.客户端.接口等. Demo地址:https://github.com/alibaba/dubbo/ ...
随机推荐
- Creating Apps With Material Design —— Defining Shadows and Clipping Views
View转载请注明 http://blog.csdn.net/eclipsexys 翻译自Developer Android,时间仓促,有翻译问题请留言指出,谢谢 定义阴影和裁减 材料设计引入了深度的 ...
- 使用断言assert
之前有看过关于Assert的书,但是不懂得如何去用,最近看别人写的代码有用这个断言(assert),今天自己动手看看如何使用断言. 断言(assert)的语义如下:如果表达式的值为0(假),则输出错误 ...
- 大到可以小说的Y组合子(一)
问:上回乱扯淡了一通,这回该讲正题了吧. 答:OK. 先来列举一些我参考过,并从中受到启发的文章. (1.)老赵的一篇文章:使用Lambda表达式编写递归函数 (2.)装配脑袋的两篇文章:VS2008 ...
- ubantu命令安装banner
banner命令可以输出图形字符 在线yum安装 $ sudo apt-get update;sudo apt-get install sysvbanner
- 在 sys.servers 中找不到服务器的解决办法,自己解决的
一开始提示,在服务器中找不到在 sys.servers 中找不到服务器 'QPAccountsDBLink',先用select * from sys.servers ,发现只能查到一个服务器名称,后 ...
- Xcode使用xib拖线时出现: could not insert new outlet connection
解决方法: 1.在新建类的时候没有选择将这个类加入到对应的"Target"中. 2.重新将文件加入项目 操作步骤就是选中出问题的.m和.h文件,点删除键,然后选"Remo ...
- 使用ffmpeg录音
官方教程:http://ffmpeg.org/ffmpeg.html 录音方法: 开始找到了这个方法,但是不行呀,好像是没有这个oss吧. oss 是linux 下的声音相关的东西,与alsa 一样, ...
- mysql 查询大量数据内存溢出
使用非buffer 的sql 查询 比如pymysql 的 pymysql.cursor.SSCursion
- java学习笔记 (2) —— Struts2类型转换、数据验证重要知识点
1.*Action.conversion-properties 如(point=com.test.Converter.PointListConverter) 具体操作类的配置文件 2.*Action. ...
- ThinkPHP自动验证
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 验证规则 数据验证可以进行数据类型.业务规则.安全判断等方面的验证操作.数据验证有两 ...