qml与C++(使用c++扩展qml)

##使用 setContextProperty,是将对象或数据暴露给 QML,一般默认就是全局单例。 函数原型

void QQmlContext::setContextProperty(const QString &name, QObject *value)
void QQmlContext::setContextProperty(const QString &name, const QVariant &value)

eg:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.rootContext( )->setContextProperty(
                "Greeting",
                QObject::tr( "Hello QML from C++" ) );//变量,qml中直接就可用此属性的值

    engine.rootContext( )->setContextProperty(
                "CPlusPlusClass",
               new CPlusPlusClass() );//对象,此处new的时候创建对象了
    //setContextProperty,在qml中是全局的
    engine.load(QUrl(QStringLiteral("qrc:///main.qml")));

    return app.exec();
}

qml中就可以使用了

Window {
    title: qsTr("Hello World")
    width: 640
    height: 480
    visible: true
    Text {
        id: text
        text: Greeting //直接就可以使用了此属性了
        anchors.centerIn: parent
    }
    Button {

        anchors.top: text.bottom
        text: "CPlusPlusClass.method()"
        MouseArea {

            anchors.fill: parent
            onClicked: {
                CPlusPlusClass.method()//调用类中的方法
            }
        }
    }
//    Greeting{// 不可以

//    }
}

##使用qmlRegisterType 注册类型到qml中

函数原型
template<typename T>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);

eg

// 1C++类类型到QML类型系统中,qml要访问类中的数据,需要把数据添加到qt元对象系统中去
qmlRegisterType<CPlusPlusClass>(  			//CPlusPlusClass c++类名
                "CPlusPlus.Test",           // 统一资源标识符  
                1,                          // 主版本  
                0,                          // 次版本  
                "CPlusPlusType" );          // QML类名称  

//2导入类型
import CPlusPlus.Test 1.0 // 分别对应于 qmlRegisterType参数的:统一资源标识符 ,主次版本

//3qml中使用
CPlusPlusType { 
//CPlusPlusType对应于qmlRegisterType参数的QML类名称 
//注:在此处CPlusPlusType才实例化.
}

##使用qmlRegisterSingletonType() 注册单例类型到qml中(实例化实在c++中实例化的) 函数原型

int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, QJSValue(* ) ( QQmlEngine *, QJSEngine * ) callback)
int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, QObject *(* ) ( QQmlEngine *, QJSEngine * ) callback)
int qmlRegisterSingletonType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName)

转载于:https://my.oschina.net/TemetNosce/blog/872797

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值