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