Qt Quick中QML和C++混合编程详解2——注册一个QML中可用的类

二、注册一个QML中可用的类(如何将C++类型注册为QML类型以及如何在QML中使用这个类型)
要达到这种目的,大概可以分四步:
实现 C++ 类
注册 QML 类型
在 QML 中导入类型
在 QML 创建由 C++ 导出的类型的实例并使用

1、注册QML类型
qmlRegisterSingletonType() 用来注册一个单例类型,
qmlRegisterType() 注册一个非单例的类型,
qmlRegisterTypeNotAvailable() 注册一个类型用来占位,
qmlRegisterUncreatableType() 通常用来注册一个具有附加属性的附加类型

qmlRegisterType() 是个模板函数,有两个原型:
要使用 qmlRegisterType 需要包含 QtQml 头文件。
先说模板参数 typename ,它就是你实现的 C++ 类的类名。
qmlRegisterType() 的第一个参数 uri ,让你指定一个唯一的包名,类似 Java 中的那种,一是用来避免名字冲突,而是可以把多个相关类聚合到一个包中方便引用。比如我们常写这个语句 “import QtQuick.Controls 1.1” ,其中的 “QtQuick.Controls” 就是包名 uri ,而 1.1 则是版本,是 versionMajor 和 versionMinor 的组合。 qmlName 则是 QML 中可以使用的类名。

template<typename T>  
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);  
  
template<typename T, int metaObjectRevision>  
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);  

实例:
下面的代码将 ColorMaker 类注册为 QML 类 ColorMaker ,主版本为 1 ,次版本为 0 ,而我起的包名则是 an.qt.ColorMaker 。注册动作一定要放在 QML 上下文创建之前,否则的话,木有用滴。

#include <QtGui/QGuiApplication>  
#include "qtquick2applicationviewer.h"  
#include <QtQml>  
#include "colorMaker.h"  
  
  
int main(int argc, char *argv[])  
{  
    QGuiApplication app(argc, argv);  
    qmlRegisterType<ColorMaker>("an.qt.ColorMaker", 1, 0, "ColorMaker");  
  
    QtQuick2ApplicationViewer viewer;  
    viewer.setMainQmlFile(QStringLiteral("qml/colorMaker/main.qml"));  
    viewer.showExpanded();  
  
    return app.exec();  
}  

2、在 QML 中导入 C++ 注册的类型
一旦你在 C++ 中注册好了 QML 类型,就可以在 QML 文档中引入你注册的包,然后使用注册的类型。要引入包,使用 import 语句。比如要使用我们注册的 ColorMaker 类,可以在 QML 文档中加入下面的 import 语句:

import an.qt.ColorMaker 1.0 

3、在 QML 中创建 C++ 导入类型的实例

Rectangle {  
    width: 360;  
    height: 360;  
      
    ColorMaker {  
        id: colorMaker;  
        color: Qt.green;  
    }  
}  
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值