• QML之信号与槽


    一、C++的信号和QML的槽

    前言:

    Qt中的信号与槽,通常是一个信号SIGNAL和一个槽SLOT,通过connet连接,而QML中不需要再写槽函数,只需要在合适的地方告诉QML:如果x信号产生则执行x

    如有信号:

    Class A{
      signals:
          void rcvData(QString str);     
    };

    则在QML里:onRcvData:{

      //执行x如console.log(str);

    }

    格式:在信号前面加on,然后信号首字母大写,注意参数可执行使用

    1、如果注册的是C++类,那么可以在QML中实例化对象的时候直接捕获

    A{
        id:a
        onRcvData:{
            console.log(str)
        }
    }    

    2、如果注册的是C++对象,则需要Connections连接

    Connections {
        target: a
        onRcvData: {
            console.log(str)
        }
    }

     二、QML的信号和QML的槽

    sendSignal.connect(target.recvSlot)

    直接使用connect连接,在合适的地方如Component.onCompleted里连接信号与槽,sendSignal当前对象是定义的信号,recvSlot实际上是一个function

    ps

    网友总结,转:http://blog.csdn.net/x356982611/article/details/53871748

    简介

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

    连接qml中信号与函数

    Component.onCompleted:
    {
        sendMessageSigal.connect(getMessage);
    }

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

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

    qml中直接调用c++函数

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

    连接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)
    {
        QMetaObject::invokeMethod(textLabel, "setL4text");
    }

    c++连接信号与槽函数

    QObject::connect(this,&CInteraction::valueChanged,this,&CInteraction::setValue); //qt5 新语法

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

    QObject::connect(this,&CInteraction::valueChanged,outPutInfo);

    c++ 连接信号与lambda函数

    QObject::connect(this,&CInteraction::valueChanged,[=,this](){  qDebug()<<"lambda called, value:"<<this->value_<<"
    "; });
  • 相关阅读:
    Windows 创建 Redis 和 zookeeper 系统服务
    mysql 5.7 非正常安装,无法启动 服务没有报告任何错误
    将整个 project 资源打包
    使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库
    所有子模块都要执行的checkstyle检查
    把项目通过maven生产源码包和文档包并发布到自己的私服上
    C#.NET常见问题(FAQ)-在VS程序如何取消.vshost的进程
    C#.NET常见问题(FAQ)-无法直接启动带有类库输出类型的项目怎么办
    C#.NET常见问题(FAQ)-VS如何整个项目中查找字符串
    C#.NET常见问题(FAQ)-如何在系统变量中加入新的环境变量
  • 原文地址:https://www.cnblogs.com/judes/p/11243242.html
Copyright © 2020-2023  润新知