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
posted @ 2017-03-15 18:22  findumars  Views(13516)  Comments(3Edit  收藏  举报