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
