Qt Quick5.2 开发笔记2 -------Qml 和 c++交互的探索

Qml 和 c++的相互交互的问题

这也是我们最关心的问题。

涉及到跟原先系统是否能集成,

这可是涉及系统架构的大问题啊。


百度/Google之后,找到了这个QM_Call_Qt_Function,原帖地址在这里:

当下载下来之后,很悲惨的发现,这个例子根本跑不起来。。。

是今天出门没看黄历?

当然不是!

 

例子是Qt 4.7,天才的Nokia竟然不向下兼容。怪不得要倒闭,被微软收购。哼!

修改很简单,只要把myclass.h中的 QObject对象改成 QQuickItem,然后按照c++惯例相应的也改掉,搞定。

 

总结:

1.      Main.cpp注册自定义的类,相应把自定义的对象类登记到qml对象模型中

qmlRegisterType<MyClass>("MyClassPackage",1, 0, "MyClassType");

       第1个,2个是包名字和版本号,qml 通过 Import MyClassPackage 1.0引入

       第3个 qml中对象名字。例如:

Qml中

    MyClassType

    {

       id:myclass

}

    Button{

       id:btn1

       anchors{

           horizontalCenter:parent.horizontalCenter

           top:label.bottom

           topMargin:10

       }

       text:qsTr("PROPERTY")

       onClicked:label.text="myclass:"+myclass.myString;

}

 

C++中的声明

Q_PROPERTY(QStringmyStringREADmyStringWRITEsetmyStringNOTIFYmyStringChanged)

 

此时即可访问myclass的属性。

 

当然myclass,也会默认生成 onMyStringChanged的默认信号。

另外也可以定义自定义的消息,在qml中按需响应。

C++中

signals:

    voidmyStringChanged();

voidmySignals(QStringstr);

 

qml中

    Connections

    {

       target:myclass

       onMyStringChanged:{

        }

       onMySignals:{

       }

    }

2.      qml 调用c++,需要在该函数前面加入:Q_INVOKABLE

C++中

    Q_INVOKABLEinttestDll(inta,intb);
    Q_INVOKABLEinttestLoadDll(inta,intb);
    Q_INVOKABLEinttestStaticLib(inta,intb);
Qml中的调用
        Button{
            id:btnT3
            text:qsTr("myclass.testDll")
            onClicked:{
                label.text=myclass.testDll(123,456);
            }
 
        }
 
        Button{
            id:btnT4
            text:qsTr("MyClass::testStaticLib")
            onClicked:{
                label.text=myclass.testStaticLib(11,123);
            }
        }
真是高端大气上档次!

Qt Quick5.2 开发笔记2 -------Qml 和 c++交互的探索,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。