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_<<"\n"; });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM