QML于C++交互之信号与槽(signal&slot )


    connect c++ SIGNAL with QML SLOT

简介

QML 与 C++ 混合编程时,总结了一下qml和c++互相直接调用、及信号与槽连接 的几种情况,详细使用情况看示例代码 
所有的QML对象都派生自QObject,不管是可视对象还是集成在c++程序中的对象。一旦QML对象被创建,就可以集成到c++中,读写属性,调用其方法和接收其信号

连接qml中信号与函数

    Component.onCompleted: { //qml 信号连接 qml函数 sendMessageSigal.connect(getMessage); }

连接 qml中函数与c++中信号

     Connections
        {
            //qml 连接 c++ 信号 target:interaction onConnectcppsignal: { label2.text=strMsg; } }

qml中直接调用c++函数

  //on<Signal> onClicked: { //qml 调用 c++函数 interaction.test(); }

连接c++中函数与qml中信号

    //c++ 函数连接 qml信号 QObject* quitButton = root->findChild<QObject*>("quitButton"); if (quitButton) { QObject::connect(quitButton, SIGNAL(clicked()), &app, SLOT(quit())); }

c++中直接调用qml中函数

    QObject* textLabel = root->findChild<QObject*>("objNameL4"); if (textLabel) { //c++ 直接调用qml函数 QMetaObject::invokeMethod(textLabel, "setL4text"); }

c++连接信号与槽函数

 //连接c++ 信号与槽 //QObject::connect(this,SIGNAL(valueChanged(int)),this,SLOT(setValue(int))); //qt4 语法 QObject::connect(this,&CInteraction::valueChanged,this,&CInteraction::setValue); //qt5 新语法

c++ 连接信号与普通函数

//信号连接普通函数 QObject::connect(this,&CInteraction::valueChanged,outPutInfo);

c++ 连接信号与lambda函数

// QObject::connect(this,&CInteraction::valueChanged,[=](int value){ qDebug()<<"lambda called, value:"<<value<<"\n"; }); QObject::connect(this,&CInteraction::valueChanged,[=,this](){ qDebug()<<"lambda called, value:"<<this->value_<<"\n"; });

代码

代码地址

参考

http://blog.csdn.net/booirror/article/details/26973611 
https://www.devbean.net/2012/04/signals-slots-in-qt5/ 
http://doc.qt.io/qt-5/qtqml-syntax-signals.html 
http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html#accessing-loaded-qml-objects-by-object-name

 
http://blog.csdn.net/x356982611/article/details/53871748


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM