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